如何在多用户网站中使用准备好的语句?
How to use prepared statements in multi user website?
在许多用户与数据库交互的网站中,在何处(在代码中)放置准备好的语句的元素?
我正在将我的代码从使用 $mysqli->escape_string
转换为使用准备好的语句,因为人们说这是防止 sql 注入的更好方法。
是否只是删除所有 $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 实例。意味着你只能将它用于重复 inserts/updates。即使在那里,收益也不是很大。
这与其说是一项真正有用的功能,不如说是一种营销技巧。
在许多用户与数据库交互的网站中,在何处(在代码中)放置准备好的语句的元素?
我正在将我的代码从使用 $mysqli->escape_string
转换为使用准备好的语句,因为人们说这是防止 sql 注入的更好方法。
是否只是删除所有 $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 实例。意味着你只能将它用于重复 inserts/updates。即使在那里,收益也不是很大。
这与其说是一项真正有用的功能,不如说是一种营销技巧。