Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli是否准备缓存结果?_Php_Mysql_Sql - Fatal编程技术网

Php mysqli是否准备缓存结果?

Php mysqli是否准备缓存结果?,php,mysql,sql,Php,Mysql,Sql,我已经读到,如果您使用mysqliprepare而不是mysqliquery,那么即使您运行脚本1000次,它也只会在数据库上运行一次。 这是否意味着如果我运行一个prepare语句,比如 select * from Table where user=?" and then mysqli_stmt_bind_param($stmt, "s", "Harry"); 数据库中不存在用户“harry”,因此num_rows将返回0。然后我立即使用user=“harry”在数据库中插入新行,并再次运行

我已经读到,如果您使用
mysqli
prepare而不是
mysqli
query,那么即使您运行脚本1000次,它也只会在数据库上运行一次。 这是否意味着如果我运行一个prepare语句,比如

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

数据库中不存在用户“harry”,因此num_rows将返回0。然后我立即使用
user=“harry”
在数据库中插入新行,并再次运行脚本,它将
返回num_rows=1
还是
返回num_rows=0
,因为结果是缓存的?

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


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

当你尝试它时会发生什么?(注意,它不会缓存)因此,如果在插入新行后使用prepare脚本刷新页面,num_行将为1?如果显示为0,那么错误是什么?SQL语句在事务中执行(显式或隐式)。如果重新执行的查询没有看到新记录,则可能意味着插入的事务仍未提交。。。或者您的选择正在旧事务中运行。很抱歉,我不理解。。。选择在隐式事务中执行,在获取所有记录和/或关闭查询时结束。OTOH插入、更新和删除通常在显式事务中使用(因为您通常希望编写多个内容,并确保它们都已写入…或没有写入)。罪魁祸首很容易是未正确处理的明确交易。但可以肯定的是,您必须进行调查并试图了解发生了什么。事务用于告诉服务器必须将一条或多条语句包装在一起。这有两个目的。第一是要确保它们要么得到正确的执行,要么你可以将它们全部回滚,就好像什么都没发生过一样。第二个目的是允许其他应用程序或用户查看稳定的数据库,而无需其他应用程序/用户进行所有持续更新。也许你应该退房