0

我第一次尝试使用 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中我重新连接到数据库一切正常,但我不想每次想查询时都连接。

4

2 回答 2

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 值,否则,未获取的行将作为下一个查询的结果集的一部分返回。Commands out of sync; you can't run this command now如果您忘记执行此操作,C API 会给出错误!

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

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

于 2013-02-27T13:48:49.140 回答
1

我是 MySQLi 的新手,昨天才开始使用它。尝试使用query()而不是real_query()它对我来说很好。

于 2013-02-27T13:42:41.500 回答