如何在MariaDB的BasicInfo表插入含特殊字符的字符串避免语法错误
问题:插入含特殊字符的数据到MariaDB时出现语法错误
表结构
CREATE TABLE `BasicInfo` ( `id` int(11) NOT NULL, `Category` varchar(255) DEFAULT NULL, `Title` varchar(255) DEFAULT NULL, `Description` mediumtext DEFAULT NULL, `createdBy` int(5) DEFAULT NULL, `creationDate` timestamp NULL DEFAULT current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
报错信息
error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use 'S',3)'
解决方法
1. 使用参数化查询(预处理语句)
这是最安全、最推荐的方案,能彻底规避特殊字符导致的语法错误,同时防止SQL注入,不同编程语言的实现示例如下:
- PHP(PDO)
$pdo = new PDO('mysql:host=localhost;dbname=你的数据库名;charset=utf8mb4', '用户名', '密码'); $stmt = $pdo->prepare("INSERT INTO BasicInfo (id, Category, Description) VALUES (?, ?, ?)"); $stmt->execute([1, "包含'、\"的分类", "带/+-=的描述内容"]);
- Python(MySQLdb)
import MySQLdb db = MySQLdb.connect(host="localhost", user="用户名", passwd="密码", db="你的数据库名", charset='utf8mb4') cursor = db.cursor() sql = "INSERT INTO BasicInfo (id, Category, Description) VALUES (%s, %s, %s)" cursor.execute(sql, (1, "包含'、\"的分类", "带/+-=的描述内容")) db.commit()
2. 手动转义特殊字符(临时替代方案)
若无法使用参数化查询,可调用数据库提供的转义函数处理用户输入,但此方法存在SQL注入风险,仅作临时应急:
- PHP(mysqli)
$conn = mysqli_connect("localhost", "用户名", "密码", "你的数据库名"); mysqli_set_charset($conn, "utf8mb4"); $category = mysqli_real_escape_string($conn, "包含'、\"的分类"); $description = mysqli_real_escape_string($conn, "带/+-=的描述内容"); $sql = "INSERT INTO BasicInfo (id, Category, Description) VALUES (1, '$category', '$description')"; mysqli_query($conn, $sql);
3. 确认连接字符集
确保数据库连接时指定utf8mb4字符集,避免因字符集不匹配导致的转义异常,这也是特殊字符能正确存储的基础。
内容的提问来源于stack exchange,提问作者5238
相关产品推荐
相关产品推荐

