使用PHP PDO向MySQL数据库插入数据时遇SQL语法错误问题
搞定PDO插入MySQL的SQL语法错误问题
嘿,看你遇到的这个PDO报错,问题其实很明显——SQL语句的字段列表部分写错啦!错误提示里的' 'user, pass)`这部分,一看就是有多余的引号或者空格搞乱了语法,MySQL根本认不出你的字段名。
为啥会报错?
你仔细看错误信息里的那段SQL片段:' 'user, pass),这里多了个莫名其妙的单引号加空格,肯定是你写SQL的时候手滑了,要么是把反引号和单引号混着用,要么是不小心多敲了空格和引号,导致MySQL解析字段名的时候直接懵了。而且user本身是MySQL的保留字,必须用反引号 `包裹,但绝对不能和单引号掺和在一起。
给你改好的代码参考
假设你的表叫users,正确的插入代码应该是这样的:
<?php // 先连好数据库 $dsn = 'mysql:host=localhost;dbname=你的数据库名;charset=utf8mb4'; $dbUser = '你的用户名'; $dbPass = '你的密码'; try { $pdo = new PDO($dsn, $dbUser, $dbPass); // 开异常模式才能拿到这么详细的报错,这个设置很有用 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 重点看这里!SQL语句的字段名用反引号正确包裹,没有多余字符 $sql = "INSERT INTO users (`user`, `pass`) VALUES (?, ?)"; $stmt = $pdo->prepare($sql); // 把要插入的参数传进去执行就行 $stmt->execute(['要插的用户名', '要插的密码']); echo "数据插进去啦!"; } catch(PDOException $e) { echo "出错啦: " . $e->getMessage(); } // 记得关掉连接 $pdo = null; ?>
几个要注意的小细节
- 保留字字段必须用反引号:像
user这种MySQL自带的保留字,一定要用反引号包起来,不然也会报错,但别和单引号搞混。 - 写SQL的时候别手滑:多检查一遍字段列表的开头,有没有多余的空格、引号,这些小细节最容易坑人。
- 开启PDO异常模式:你现在能看到这么详细的错误提示,多亏了
ERRMODE_EXCEPTION这个设置,平时开发的时候一定要开着,排查问题超方便。
要是还不确定哪里错,你可以在prepare之前把SQL语句打印出来看看,比如echo $sql;,一眼就能看到有没有多余的奇怪字符啦~
内容的提问来源于stack exchange,提问作者M G C C
相关产品推荐
相关产品推荐

