我发现无论您是否检查mysqli_store_result的结果,行为都有不同。我还没有找到原因的解释。
我有以下PHP代码(部分):
$qry = mysqli_multi_query($this->link, $sql);
if ($qry) {
do {
$sto = mysqli_store_result($this->link);
if ($sto) {
$res[] = mysqli_fetch_all($sto, MYSQLI_ASSOC);
mysqli_free_result($sto);
mysqli_store_result返回一个缓冲结果对象,如果根据手册发生错误,则返回FALSE,并存储在变量$ sto中。 一切正常,mysqli_fetch_all接受变量$ sto并以$ res返回一个关联数组,并包含所有结果。看起来像这样:
$res = Array (1)
[0] = Array (1)
| [0] = Array (11)
| | [s_id] = Number: 82
| | [s_auth] = String: ''
| | [s_titl] = String: '"Who's Who"'
| | [s_abbr] = String: '"Who's Who"'
| | [s_publ] = String: ''
| | [s_text] = String: ''
| | [s_chan] = String: '2018-09-23 11:37:35'
为了调试此过程,我在调试打开时写了一个日志文件。修改后的代码以“ if($ deb)...”开头。代码如下:
$qry = mysqli_multi_query($this->link, $sql);
if ($deb) {$this->logg_mysql_debug(' $qry = '.$this->obj_to_str($qry),$prog,$row,__LINE__);}
if ($qry) {
if ($deb) {$this->logg_mysql_debug(' *** DO-LOOP ***',$prog,$row,__LINE__);}
do {
$sto = mysqli_store_result($this->link);
if ($deb) {$this->logg_mysql_debug(' $sto1 = '.$this->obj_to_str($sto1),$prog,$row,__LINE__);}
if ($sto) {
$res[] = mysqli_fetch_all($sto, MYSQLI_ASSOC);
if ($deb) {$this->logg_mysql_debug(' $res = '.$this->obj_to_str($res),$prog,$row,__LINE__);}
mysqli_free_result($sto);
以$ deb = 1运行时,$ sto对象为:
$sto = Object (mysqli_result)
0 -> Array (11)
| [s_id] = Number: 82
| [s_auth] = String: ''
| [s_titl] = String: '"Who's Who"'
| [s_abbr] = String: '"Who's Who"'
| [s_publ] = String: ''
| [s_text] = String: ''
| [s_chan] = String: '2018-09-23 11:37:35'
但是$ res现在看起来像这样:
$res = Array (1)
[0] = Array (0)
因此,在打印$ sto的内容时,它将以某种方式从其初始状态变为不会给调用带来相同结果的内容 到mysqli_fetch_all。
我的解决方案是跳过打印$ sto并且一切正常,但是我很好奇是否在某处描述了这种状态变化(行为?)?