MySQL/PHP多查询:3条语句,2个结果
我正在编写一个php脚本,它与MySQL数据库通信,并将结果格式化为字符串,可以由我正在构建的Objective-C框架解析 目前,我正试图让多个语句/结果发挥作用,但我在这里遇到了一些问题 我将以多语句的形式发送3条语句:MySQL/PHP多查询:3条语句,2个结果,php,mysql,mysqli,Php,Mysql,Mysqli,我正在编写一个php脚本,它与MySQL数据库通信,并将结果格式化为字符串,可以由我正在构建的Objective-C框架解析 目前,我正试图让多个语句/结果发挥作用,但我在这里遇到了一些问题 我将以多语句的形式发送3条语句: 从表中选择*(返回结果集) 从表中选择字段(返回结果集) 插入表值值(应返回重复错误) do while循环被调用两次,前两条语句中的每一条都调用一次,但是INSERT语句没有第三次调用它 if ($mysql->more_results()) { ech
(返回结果集)从表中选择*
(返回结果集)从表中选择字段
(应返回重复错误)插入表值值
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()
,然后echojson\u encode()
输出一种格式,该格式包含Objective C需要使用
)
希望这能为您提供正确问题的方向。代码
}$result->close()中有这一行从中可以看出,$result
是一个对象,close()
函数不是此类的一部分
也许您需要将该行更改为}$result->free()代码>
我希望它会有所帮助如果INSERT
发出错误,我不希望它返回一个(甚至是空的)结果集。相反,如果通过,数据库可能会返回一个空的结果集。这可能解释了你的问题,但我几乎不明白你想要实现什么。。。你看过这个吗?在我看来,多查询的执行在出现错误时就结束了。使用json进行RESTful通信,操作数据会更容易,发送和接收数据会更轻松/更快。我以前从未使用过json,我可能会研究一下,看看如何在我的项目中使用它。目前,我正在使用[string componentsSeparatedByString:@“|*|”]解析字符串。不过,似乎需要做很多工作,将所有内容都更改为JSON。好眼力,我更改了它,它并没有解决问题,但可能是一个很大的内存泄漏。这看起来非常容易。我以前从未使用过JSON,但我肯定会研究它。这真的很简单。很乐意帮忙。请检查最有价值的解决方案并关闭。