MySqli用XMLHttpRequest的$ _POST编写的语句不要写

时间:2019-12-10 12:31:33

标签: php mysqli prepared-statement

您好,我正在尝试使用一个简单的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();

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

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

你快到了。

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

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

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

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

自从您将该变量传递至下一行的prepare()


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

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