使用PDO向MySQL表插入数据时出现1054列不存在错误求助
解决PDO插入数据时的"Unknown column"错误
问题根源
你碰到的Column not found: 1054 Unknown column 'testing' in 'field list'错误,本质是直接把变量拼进SQL语句,没有给字符串值加引号包裹。当你输入testing时,MySQL会把它当成列名而非字符串值,自然找不到对应的列。而且这种写法还存在极高的SQL注入风险,绝对不能用于生产环境。
正确解决方案:使用PDO预处理语句
PDO的预处理语句能自动处理值的转义和引号包裹,既解决语法错误,又彻底规避SQL注入风险。修正后的PHP代码如下:
<?php try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // 设置PDO错误模式为异常 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 使用占位符编写预处理SQL $sql = "INSERT INTO test (Name, Test) VALUES (:name, :test)"; $stmt = $conn->prepare($sql); // 绑定表单提交的值(注意和HTML表单的name属性对应) $stmt->bindParam(':name', $_POST['name']); $stmt->bindParam(':test', $_POST['Test']); $stmt->execute(); echo "New record created successfully"; } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?>
关键注意点
- 用
:name、:test这类占位符替代直接拼接变量,PDO会自动处理字符串的引号和转义逻辑 - 确保HTML表单的
name属性(name="name"和name="Test")与PHP中$_POST的键严格对应 - 提前确认你的MySQL表
test确实存在Name和Test列,列名大小写要和数据库中保持一致(MySQL在不同系统下对大小写敏感程度不同) - 建议对用户输入做基本验证(比如非空检查),进一步提升程序健壮性
内容的提问来源于stack exchange,提问作者Matt Schaak
相关产品推荐
相关产品推荐

