Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.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
MySQL/PHP多查询:3条语句,2个结果_Php_Mysql_Mysqli - Fatal编程技术网

MySQL/PHP多查询:3条语句,2个结果

MySQL/PHP多查询:3条语句,2个结果,php,mysql,mysqli,Php,Mysql,Mysqli,我正在编写一个php脚本,它与MySQL数据库通信,并将结果格式化为字符串,可以由我正在构建的Objective-C框架解析 目前,我正试图让多个语句/结果发挥作用,但我在这里遇到了一些问题 我将以多语句的形式发送3条语句: 从表中选择*(返回结果集) 从表中选择字段(返回结果集) 插入表值值(应返回重复错误) do while循环被调用两次,前两条语句中的每一条都调用一次,但是INSERT语句没有第三次调用它 if ($mysql->more_results()) { ech

我正在编写一个php脚本,它与MySQL数据库通信,并将结果格式化为字符串,可以由我正在构建的Objective-C框架解析

目前,我正试图让多个语句/结果发挥作用,但我在这里遇到了一些问题

我将以多语句的形式发送3条语句:

  • 从表中选择*
    (返回结果集)
  • 从表中选择字段
    (返回结果集)
  • 插入表值值
    (应返回重复错误)
do while循环被调用两次,前两条语句中的每一条都调用一次,但是
INSERT
语句没有第三次调用它

if ($mysql->more_results()) {
    echo("MULTIRESULT|*|".mysqli_errno($mysql)."|*|".mysqli_error($mysql)."|*|");
    $i4 = 0;
    do {
        if ($i4 != 0) {
            echo("|&|");
        }

        $result = $mysql->store_result();

        if ($result) {
            echo("RESULTSET|%|");
            $i1 = 0;
            while ($field = $result->fetch_field()) {
                if ($i1 != 0) {
                    echo("|+|");
                } echo($field->name."|@|".$field->orgname."|@|".$field->table."|@|".$field->orgtable."|@|".$field->db."|@|".$field->catalog."|@|".$field->def."|@|".$field->length."|@|".$field->maxlength."|@|".$field->flags."|@|".$field->decimals."|@|".$field->charsetnr."|@|".$field->type);
                $i1++;
            }

            echo("|~|");

            $i2 = 0;
            while ($row = $result->fetch_row()) {
                if ($i2 != 0) {
                    echo("|+|");
                }

                $fieldcount = $mysql->field_count;
                for ($i3 = 0; $i3 < $fieldcount; $i3++) {
                    if ($i3 != 0) {
                        echo("|@|");
                    } echo($row[$i3]);
                }

                $i2++;
            }
        } else if ($mysql->field_count == 0) {
            echo("AFFECTEDROWS|%|".$mysql->affected_rows);
        } else {
            echo("UNSUCCESSFUL|%|".mysqli_errno($mysql)."|%|".mysqli_error($mysql));
        } $result->close();
        $i4++;
    } while ($mysql->next_result());
}
我会说这是因为
mysqli\u next\u result
只在有resultset的情况下工作,但是当我在没有重复的情况下执行
INSERT
语句时,会为该语句调用do while循环

if ($mysql->more_results()) {
    echo("MULTIRESULT|*|".mysqli_errno($mysql)."|*|".mysqli_error($mysql)."|*|");
    $i4 = 0;
    do {
        if ($i4 != 0) {
            echo("|&|");
        }

        $result = $mysql->store_result();

        if ($result) {
            echo("RESULTSET|%|");
            $i1 = 0;
            while ($field = $result->fetch_field()) {
                if ($i1 != 0) {
                    echo("|+|");
                } echo($field->name."|@|".$field->orgname."|@|".$field->table."|@|".$field->orgtable."|@|".$field->db."|@|".$field->catalog."|@|".$field->def."|@|".$field->length."|@|".$field->maxlength."|@|".$field->flags."|@|".$field->decimals."|@|".$field->charsetnr."|@|".$field->type);
                $i1++;
            }

            echo("|~|");

            $i2 = 0;
            while ($row = $result->fetch_row()) {
                if ($i2 != 0) {
                    echo("|+|");
                }

                $fieldcount = $mysql->field_count;
                for ($i3 = 0; $i3 < $fieldcount; $i3++) {
                    if ($i3 != 0) {
                        echo("|@|");
                    } echo($row[$i3]);
                }

                $i2++;
            }
        } else if ($mysql->field_count == 0) {
            echo("AFFECTEDROWS|%|".$mysql->affected_rows);
        } else {
            echo("UNSUCCESSFUL|%|".mysqli_errno($mysql)."|%|".mysqli_error($mysql));
        } $result->close();
        $i4++;
    } while ($mysql->next_result());
}

我对这个问题一无所知,甚至不知道如何表达我的问题,但我想这里的问题很明显。

如果您希望让PHP、mySQL和Objective C进行通信,我绝对建议将此方法更改为更简单的方法

在我看来,发送和接收JSON是处理PHP和Objective C之间通信的最佳方法。当您从mysql接收结果时,可以简化您编写的内容

例如:

如果您希望将整个SELECT语句发送到目标C,我将使用
fetch\u object()
而不是
fetch\u field()
,然后echo
json\u encode()
输出一种格式,该格式包含Objective C需要使用

)


希望这能为您提供正确问题的方向。

代码
}$result->close()中有这一行$result
是一个对象,
close()
函数不是此类的一部分

也许您需要将该行更改为
}$result->free()


我希望它会有所帮助

如果
INSERT
发出错误,我不希望它返回一个(甚至是空的)结果集。相反,如果通过,数据库可能会返回一个空的结果集。这可能解释了你的问题,但我几乎不明白你想要实现什么。。。你看过这个吗?在我看来,多查询的执行在出现错误时就结束了。使用json进行RESTful通信,操作数据会更容易,发送和接收数据会更轻松/更快。我以前从未使用过json,我可能会研究一下,看看如何在我的项目中使用它。目前,我正在使用[string componentsSeparatedByString:@“|*|”]解析字符串。不过,似乎需要做很多工作,将所有内容都更改为JSON。好眼力,我更改了它,它并没有解决问题,但可能是一个很大的内存泄漏。这看起来非常容易。我以前从未使用过JSON,但我肯定会研究它。这真的很简单。很乐意帮忙。请检查最有价值的解决方案并关闭。