在许多用户与数据库交互的网站中,将准备好的语句的元素放置在哪里(在代码中)?
我正在将代码从使用 $mysqli->escape_string
转换为使用准备好的语句,因为人们说这是防止 SQL 注入(inject)的更好方法。
是否只是删除所有 $mysqli->escape_string
并替换代码的其他部分,如下所示:
$mysqli->query("update `users` set `email`='$newEmail' where `userid`={$_SESSION['userid']} limit 1");
替换为:
$stmt = $mysqli->prepare("update `users` set `email`=? where `userid`=? limit 1");
$stmt->bind_param('si',$newEmail,$_SESSION['userid']);
$stmt->execute();
$stmt->close();
?
人们说准备好的语句更有效,因为语句模板仅准备一次,然后可以使用不同的参数重复使用。但是在上面的代码替换中每次用户想要更新其电子邮件地址时是否都会完成模板准备?我应该在服务器启动时准备所有语句吗?并且不再准备它们? (虽然我不知道该怎么做。) prepare
、bind_param
和 close
应该放在我网站代码的什么位置?
最佳答案
Is it simply removing all $mysqli->escape_strings and also replacing variables with placeholders
是的。
People say prepared statements is more efficient as statement template is prepared only once and then it can be re-used with different parameters.
忘记它吧。无法在请求之间重用准备好的语句。
它仅在语句变量中工作,因此仅适用于单个 PHP 实例。意味着您只能将其用于重复插入/更新。即使在那里, yield 也不显着。
这更像是一种营销技巧,而不是真正有用的功能。
关于php - 如何在多用户网站中使用准备好的语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59768332/