为什么我不能重复使用mysqli-> realquery几次而不再连接?

时间:2013-02-27 13:20:17

标签: php mysqli

我第一次尝试使用mysqli,我需要在脚本上做一些查询。这是基本流程:

$mysqli = new mysqli("localhost", "root", "", "kiosk");
if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; }

$mysqli->real_query("SELECT * FROM screens WHERE name = '" . $screen_code . "'");
$res = $mysqli->use_result();
$row = $res->fetch_assoc();

print_r(_content($row['wcode']));
die();

function _content($wcode) {
  global $mysqli;
  $mysqli->real_query("SELECT * FROM content WHERE wcode= '" . $wcode. "' ORDER BY id ASC");
  $res = $mysqli->use_result();
}

mysql查询是正确的,已经在mysql上直接测试了,如果在_content中我会重新协调数据库一切正常,但我不想每次想要查询时连接。

2 个答案:

答案 0 :(得分:2)

使用use_result()时,必须特别注意在使用相同连接发出新命令/语句之前检索完整的结果集。 store_result()为您处理此过程。 见https://dev.mysql.com/doc/refman/4.1/en/mysql-use-result.html

使用mysql_use_result()时,必须执行mysql_fetch_row()直到返回NULL值,否则,未获取的行将作为下一个查询的结果集的一部分返回。如果您忘记执行此操作,C API会给出错误Commands out of sync; you can't run this command now

对于php / mysql API也是如此。

您可以通过JOIN

将两个查询合并为一个
SELECT
    c.foo, c.bar, c.baz
FROM
    screens as s
LEFT JOIN
    content as c
ON
    s.wcode=c.wcode
WHERE
    s.name = 'something'
ORDER BY
    c.id

从而避免所有这些麻烦...

答案 1 :(得分:1)

我是MySQLi的新手,昨天刚开始使用它。 尝试使用query()代替real_query()它可以和我一起使用。