您好,我正在尝试使用一个简单的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();
我的代码有问题吗,我真的不明白我在这里做错了什么。
非常感谢您的帮助!
答案 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错误检查向后兼容。)
通过启用这些异常,可以更明显地报告这些错误,并且更容易发现。