You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:16:51