首页 >后端开发 >php教程 >如何解决 PHP 准备语句数据库更新中参数顺序不正确的问题?

如何解决 PHP 准备语句数据库更新中参数顺序不正确的问题?

DDD
DDD原创
2024-10-21 20:06:29773浏览

How to Resolve Incorrect Parameter Order in PHP Prepared Statement Database Updates?

用于数据库更新的 PHP 准备语句

本讨论围绕如何正确利用 PHP 中的准备语句来防止 SQL 注入等漏洞进行。相关代码块的目的是使用准备好的语句更新具有单个字段的数据库表。

在提供的代码中,class.Scripts.inc 文件中的 update() 方法使用准备好的语句语句尝试更新数据转储表。但是,由于bind_param()方法期间参数顺序不正确,执行不成功。当前代码按照 $id 和 $content 的顺序绑定参数,而 SQL 语句期望它们以相反的顺序,导致记录识别不正确,影响零行。

下面更正的代码纠正了这个问题通过以正确的顺序绑定参数并提供额外的错误处理来处理错误:

<code class="php">$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
/* Always check whether the prepare() succeeded */
if ($stmt === false) {
    trigger_error($this->mysqli->error, E_USER_ERROR);
    return;
}

$id = 1;
/* Bind our params */
/* Bind variables in the same order as SQL params */
$stmt->bind_param('si', $content, $id);

/* Set our params */
/* No escaping needed when using prepared statements */
$content = $_POST['content'] ?: '';

/* Execute the prepared Statement */
$status = $stmt->execute();
/* Always check whether the execute() succeeded */
if ($status === false) {
    trigger_error($stmt->error, E_USER_ERROR);
}

printf("%d Row inserted.\n", $stmt->affected_rows);</code>

关于您的具体查询:

  1. 您遇到的“0 Rows Inserted”消息是由于颠倒的参数顺序。 id 和 content 参数绑定的顺序不正确,导致 WHERE 子句匹配不到任何行。
  2. 更新表时,只修改需要的字段是可以接受的。表中的其他列将保持不变。

以上是如何解决 PHP 准备语句数据库更新中参数顺序不正确的问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn