我试图在我的网站上进行就地编辑方式。
现在我设置了我需要的所有东西。
当用户点击“提交”时,它会发送id
元素的div
(内容类型)和要更新的新值。
这是我的代码:
if($pedit = $mysqli->prepare("UPDATE `accounts` SET ? = ? WHERE `id`= ? ")){
$pedit->bind_param("sss", $id, $value, $_SESSION["user_id"]);
$pedit->execute();
$pedit->free_result();
$pedit->close();
}
我不知道为什么它不更新信息。
$id
=更改的行:说明,全名,电子邮件等。
$value
=有关$id
的新信息。用户可以更新他的个人资料信息。
代码没有向我显示任何类型的错误,但仍然无法更新。
答案 0 :(得分:5)
您无法在预准备语句中将列名指定为参数。在准备之前,您必须将列名替换为语句。不要忘记将可编辑的列名列入白名单,以确保不会执行不需要的SQL。
<?php
$accounts_editable_cols = array(
'name'=>true, 'street'=>true, 'city'=>true,
'region'=>true, 'postal'=>true, 'phone'=>true
);
// prevent SQL injection by whitelisting column names
if (!array_key_exists($id, $accounts_editable_cols)) return false;
$pedit = $mysqli->prepare("UPDATE `accounts` SET $id = ? WHERE `id`= ? ")
if ($pedit) {
$pedit->bind_param("ss", $value, $_SESSION["user_id"]);
$pedit->execute();
$pedit->free_result();
$pedit->close();
}