用于数据库更新的 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>
关于您的具体查询:
以上是如何解决 PHP 准备语句数据库更新中参数顺序不正确的问题?的详细内容。更多信息请关注PHP中文网其他相关文章!