你好,我试图让一个简单的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();
我的代码有问题吗,我真的不明白我在做什么错。
非常感谢您的帮助!
您快到了。
当前您正在尝试执行此查询,而不是准备它:
$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错误检查向后兼容。)
通过启用这些异常,可以更明显地报告这些错误,并且更容易发现。