php – mysqli_store_result()实际上做了什么?
我想明白
mysqli_store_result究竟做了什么?当我访问了mysqli_store_result的
PHP Manual时,我找到了定义
mysqli_store_result — Transfers a result set from the last query 问题是它转移结果集的位置? mysqli_multi_query($connection,$query); do { mysqli_store_result($connection); } while(mysqli_next_result($connection)); 现在,我应该在每个mysqli_query之后或者在mysqli_multi_query之后使用这个mysqli_store_result($connection)和mysqli_next_result($connection)因为我已经在PHP Manaul中读过
资料来源:PHP: mysqli_store_result 当我执行上面提到的mysqli_multi_query($connection,$query)时,还有一个问题出现了;我把一个声明echo’存储结果< br />‘如下 do { echo 'storing result <br /> mysqli_store_result($connection); } while(mysqli_next_result($connection)); 虽然$query中只有两个INSERT查询,但它给出了以下输出 storing result storing result storing result storing result 这意味着有四个结果集被转移.我无法理解这种情况.
之前的评论已经声明mysqli_store_result()不能与INSERT语句一起使用,但没有人提到实际的适当函数:mysqli_affected_rows().
如果您的语句返回一个记录集并且您想以数字方式检查它,那么使用mysqli_num_rows(). 如果处理混合物,这可能会让你开始: $queries[] = "INSERT INTO TestTable (Column1) VALUES ('TEST1')"; $queries[] = "SELECT * FROM TestTable WHERE Column1 LIKE 'TEST%'"; $queries[] = "INSERT INTO TestTable (Column1) VALUES ('TEST2')"; $queries[] = "SELECT * FROM TestTable WHERE Column1 LIKE 'TEST%'"; $queries[] = "DELETE FROM TestTable WHERE Column1 LIKE 'TEST%'"; if(mysqli_multi_query($con,implode(';',$queries))){ do{ if($result = mysqli_store_result($con)){ echo "Selected rows = " . mysqli_num_rows($result) . "<br><br>"; mysqli_free_result($result); }else{ $cumulative_rows += $aff_rows = mysqli_affected_rows($con); echo "Current Query's Affected Rows = $aff_rows,Cumulative Rows = $cumulative_rows<br><br>"; } } while(mysqli_more_results($con) && mysqli_next_result($con)); } 输出: Current Query's Affected Rows = 1,Cumulative Affected Rows = 1 Selected rows = 1 Current Query's Affected Rows = 1,Cumulative Affected Rows = 2 Selected rows = 2 Current Query's Affected Rows = 2,Cumulative Affected Rows = 4 对于数据库查询主题的新手来说,这是一个重要的注意事项:如果您使用的是用户提供的/外部源/不可信的数据,那么您应该使用带有占位符的预准备语句来实现安全性/稳定性(mysqli_multi_query()不支持此事) .使用mysqli_multi_query()似乎是发送一批查询的一种很酷,简洁的方法,但是使用此功能并没有太多令人信服的理由/场景,而不是以安全的方式一次一个地发送查询. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |