PHP MySQLi経由で非同期クエリを使用しようとしています。PHP MySQLiの非同期クエリ
次のコードは簡略化されていますが、元のコードはクラスの依存関係のためにここではあまりにも冗長です。また接続mysqli_handle
への参照が既に設定されていると仮定してください。
$query_1 = "SHOW TABLES FROM moxedo";
$query_2 = "CREATE TABLE `moxedo`.`mox_config_n85ad3` (`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT , `group_id` INT(3) UNSIGNED NOT NULL , `is_enabled` INT(1) UNSIGNED NOT NULL , `tag` VARCHAR(255) NOT NULL , `name` VARCHAR(80) NOT NULL , `value` VARCHAR(255) NOT NULL , `description` TEXT NOT NULL , `init_params` TEXT NOT NULL , `datetime_added` DATETIME NOT NULL , `datetime_lastmodified` DATETIME NOT NULL , `timestamp_univ` BIGINT(14) NOT NULL , PRIMARY KEY (`id`)) ENGINE = INNODB
";
$query_3 = "ALTER TABLE `moxedo`.`mox_config_n85ad3` ADD UNIQUE `ix_u_tag_oq` (`tag`)";
$query_4 = "SHOW TABLES FROM moxedo";
if (!$mysqli_stmt_obj = $mysqli_handle->query($query_1))
{
printf("Error: %s\n", $mysqli_handle->error);
}
if (!$mysqli_stmt_obj = $mysqli_handle->query($query_2, MYSQLI_ASYNC))
{
printf("Error: %s\n", $mysqli_handle->error);
}
if (!$mysqli_stmt_obj = $mysqli_handle->query($query_3, MYSQLI_ASYNC))
{
printf("Error: %s\n", $mysqli_handle->error);
}
if (!$mysqli_stmt_obj = $mysqli_handle->query($query_4))
{
printf("Error: %s\n", $mysqli_handle->error);
}
クエリ1を呼び出すとOKが実行されます。クエリ2の呼び出しもOKになります。
しかし、クエリー3とクエリー4を実行しようとすると「コマンドが同期していないので、このコマンドを実行できません」というエラーが表示されます。私の研究オンラインでは、mysqli_free_result
2とクエリ3は結果セットを返しません。
このエラーが発生しないで複数の呼び出しを行うことができるように、非同期呼び出しを正しく終了するには、何が必要ですか?
ありがとうKyle。とても有難い。私はこれを早く見つけたかどうかは分かりませんが、後で私のために便利になるでしょう。乾杯。 –
ありがとう、@カイル。これはこのシナリオの非常に良い説明です。 –