mysqli准备缓存结果吗


Does mysqli prepare cache results?

我已经读到,如果您使用mysqli prepare而不是mysqli查询,即使您运行脚本1000次,它也只能在数据库上运行一次。这是否意味着,如果我运行一个类似的prepare语句

select * from Table where user=?"
and then mysqli_stmt_bind_param($stmt, "s", "Harry");

并且用户"harry"在数据库中不存在,所以num_rows将返回0。然后我立即在数据库中插入一个具有user="harry"的新行,并再次运行脚本,是return num_rows=1还是仍然是return num_rows=0,因为结果已缓存?

您看到新插入的行的事实取决于其他因素。。。事务和事务隔离。准备语句只是意味着服务器知道接下来会发生什么,并计算出优化语句的计划。然后,您可以使用相同或不同的参数多次运行查询,服务器将不再需要对其进行分析。。。只要执行它。

所以。。。回答你的问题。。。第二次您应该得到numrows=1。但如果你不这样做,问题不在于你准备了一个带有参数的查询。。。这是另一回事。