mysqli insert php变量未按预期工作

mysqli insert php变量未按预期工作,php,mysql,mysqli,Php,Mysql,Mysqli,我正在将一些数据插入一个新表中,如下所示: foreach ($results as $key => $val){ $sql = "INSERT INTO submission_meta (key, value) VALUES ('".$key."', '".$val."')"; if ($conn->query($sql) === TRUE) { echo "New recor

我正在将一些数据插入一个新表中,如下所示:

foreach ($results as $key => $val){
    $sql = "INSERT INTO submission_meta (key, value) VALUES ('".$key."', '".$val."')";  
    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
} 
foreach($结果为$key=>$val){
$sql=“在提交中插入元(键,值)值(““$key.”,“$val.”);
if($conn->query($sql)==TRUE){
echo“新记录创建成功”;
}否则{
echo“Error:”.$sql.“
”$conn->Error; } }
当我使用变量在foreach中运行上述操作时,我得到以下错误:

错误:在提交中插入元(键、值)值('first\u name','John')
中有错误 您的SQL语法;检查与MySQL服务器版本对应的手册,了解正确的语法 在第1行使用近“key,value”值('first_name','John')

如果我对要插入的数据进行硬编码,数据就会很好地进入数据库


上面有什么问题吗?

键是MySQL中的保留关键字

只有将其括在后面的记号中以分隔为标识符时,才能将其用作列名

VALUE
也是一个关键字,但不是保留关键字。可以使用非保留关键字(如
VALUE
)作为标识符,而不使用反勾号


注意:这不是语法错误的原因,但请学习使用查询参数,而不是在SQL查询中插入PHP变量

下面是编写代码的好方法(假设使用PDO):


检查值“john”是否包含单引号。@scaisEdge
key
是mysql保留的word@u_mulder对的然后操作应该在列名周围使用backtics。请注意,构建查询的方式是不安全的。你对我敞开心扉。你应该改用。他们还将自动处理报价。
$sql = "INSERT INTO submission_meta (`key`, value) VALUES (?, ?)";
$stmt = $conn->prepare($sql);
foreach ($results as $key => $val) {
    $stmt->execute([$key, $val]);
}