mysqli_store_result的结果以两种不同的方式表现

时间:2018-10-03 13:29:04

标签: mysqli

我发现无论您是否检查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并且一切正常,但是我很好奇是否在某处描述了这种状态变化(行为?)?

0 个答案:

没有答案