我第一次尝试使用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中我会重新协调数据库一切正常,但我不想每次想要查询时连接。
答案 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()
它可以和我一起使用。