Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 就地编辑更新文本_Php_Mysql_Mysqli - Fatal编程技术网

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()
)来避免查询),但您可以首先使用可接受的可能列名数组对其进行验证。我正在寻找一个现有的问题来说明这一点-这是经常被问到的。。。