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() を使用する場合、NULL 値が返されるまで mysql_fetch_row() を実行する必要があります。そうしないと、フェッチされていない行が次のクエリの結果セットの一部として返されます。Commands out of sync; you can't run this command nowこれを忘れると、C API でエラーが発生します。

php/mysql API についても同様です。

JOINを使用して、2 つのクエリを 1 つに結合できます。

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 に答える