mysqli複数クエリ-変数を設定するとブールエラーが発生します/これをスキップする方法は?

StackOverflow https://stackoverflow.com/questions/1227022

  •  22-07-2019
  •  | 
  •  

質問

phpmyadminで正常に動作する次の簡単なクエリを取得しますが、php Webサイトに追加すると、結果は返されず、エラー/警告メッセージも表示されません。 " SET @ N = -1;"を削除した場合正常に動作します。

<?php 
$db_connect = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, true);
mysql_select_db(DB_NAME, $db_connect);

$test_query = mysql_query("SET @N=-1;SELECT `id`, (@N:=@N+1) AS `mycount` FROM `mydb`;");

for ($i = 0; $i <= mysql_num_rows($test_query)-1; $i++) {
   echo mysql_result($db_directorymap, $i, 0) . " " . mysql_result($db_directorymap, $i, 1) . "<br />";
}
?>

更新:mysqliに移行したばかりですが、もちろんmysqlステートメントとmysqli_multi_queryにまだ問題があります。クエリの最初の部分を実行すると、返される結果は空であるため、ブールエラーが表示されます。最初の結果セットをスキップする必要があると思いますが、それを行う方法がわかりませんか?

役に立ちましたか?

解決

これは、 mysql_query 関数がクエリを1つしか受け入れないが、セミコロンで区切って2つのクエリを指定したためです。いずれかを試してください:

  1. 各クエリを個別に実行する(これが機能するかどうかわからない):

    mysql_query( "SET @N=-1" );
    mysql_query( "SELECT `id`, (@N:=@N+1) AS `mycount` FROM `mydb`" );
    
  2. mysqli multi_query 関数(または PDO (存在する場合は同等)。

更新された質問に答えるには、multi_queryのPHPマニュアルページを確認します。 mysqli :: next_result を使用したいと思うと思います。手続き型を使用したこのようなもの:

mysqli_multi_query($link, $query);
mysqli_next_result($link);

if ($result = mysqli_store_result($link)) {
    while ($row = mysqli_fetch_row($result)) {
        printf("%s\n", $row[0]);
    }
    mysqli_free_result($result);
}

他のヒント

mysql_queryを介した複数のクエリはサポートされていないため、後続のSELECTコマンドではなく、SETコマンドのみを実行していると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top