来自XMLHttpRequest的带有$ _POST的MySqli预备语句,请勿写入[关闭]

问题描述 投票:0回答:1

你好,我试图让一个简单的mysqli准备好的语句起作用。

我正在使用XMLHttpRequest运行此脚本。

在我正在努力的网站上,您将能够提供很多建议,我需要清理所有内容。由于mysqli_real_escape_string还不够,我必须使用准备好的语句。

这是没有准备语句的查询:

$account = $_POST["passaccountname"];
$newFullName = $_POST["userNameUpdate"];

$mysqli = new mysqli('localhost', 'root', '', 'os_test');
$sql = $mysqli->query("UPDATE test_users SET FULLNAME='".$newFullName."' WHERE LOWER(REPLACE(NAME, ' ', ''))='".$account."'");

这很好用,但是当然这不是顺序的!

因此,我研究了如何做出准备好的陈述,这看起来并不难。我更改了passaccountname变量,并将其与“ NAME”列/行匹配。

即使表面上似乎似乎没有任何事情发生,这是现在的代码:

$account = $_POST["passaccountname"];
$newFullName = $_POST["userNameUpdate"];

$mysqli = new mysqli('localhost', 'root', '', 'os_test');
$sql = $mysqli->query("UPDATE test_users SET FULLNAME=? WHERE NAME=?");
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $n, $a);

$n = $newFullName;
$a = $account;
$stmt->execute();

我的代码有问题吗,我真的不明白我在做什么错。

非常感谢您的帮助!

php mysqli prepared-statement
1个回答
4
投票

您快到了。

当前您正在尝试执行此查询,而不是准备它:

$sql = $mysqli->query("UPDATE test_users SET FULLNAME=? WHERE NAME=?");

将呼叫转移到query()。您可以将该行替换为:

$sql = "UPDATE test_users SET FULLNAME=? WHERE NAME=?";

由于您将该变量传递给下一行的prepare()


Edit:响应a comment below,通常在代码中将enable mysqli exceptions也是一个好主意。默认情况下,此类错误会“静默失败”,这可能会使它们难以捕获。 (这可能是为了与以前的mysql / mysqli错误检查向后兼容。)

通过启用这些异常,可以更明显地报告这些错误,并且更容易发现。

© www.soinside.com 2019 - 2024. All rights reserved.