Php 就地编辑更新文本
我正在尝试在我的网站上进行就地编辑。 现在我设置了所有我需要的东西。 当用户单击提交时,它将发送Php 就地编辑更新文本,php,mysql,mysqli,Php,Mysql,Mysqli,我正在尝试在我的网站上进行就地编辑。 现在我设置了所有我需要的东西。 当用户单击提交时,它将发送div元素的id(什么类型的内容)和要更新的新值 这是我的密码: if($pedit = $mysqli->prepare("UPDATE `accounts` SET ? = ? WHERE `id`= ? ")){ $pedit->bind_param("sss", $id, $value, $_SESSION["user_id"]); $pedit->execute
div
元素的id
(什么类型的内容)和要更新的新值
这是我的密码:
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
的新信息。用户可以更新其个人资料信息
代码没有显示任何类型的错误,但仍然没有更新。您不能在准备好的语句中指定列名作为参数。相反,您必须在准备语句之前将列名替换到语句中。别忘了将可编辑列名列入白名单,以确保不会执行不需要的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();
}
它不起作用,因为不允许使用?
占位符代替列或表标识符。它们只能用于标量值(分配给列的值),因此对于输入变量$id
,不能使用占位符。相反,您必须将该变量放入查询中(您试图通过使用prepare()/bind\u param()/execute()
)来避免查询),但您可以首先使用可接受的可能列名数组对其进行验证。我正在寻找一个现有的问题来说明这一点-这是经常被问到的。。。