web-dev-qa-db-ja.com

$ wpdb-> prepareで複数のクエリを実行できますか?

Phpmyadminで完全に実行されるクエリ(実際には複数のクエリ)があります(get_varの代わりにget_resultsを試してみましたが、$wpdb->prepareの代わりに使用する必要があると思います)。

function myfunction( $campaign_id = 0 ) {
    global $wpdb;
    $coupon_code = $wpdb->get_results(  $wpdb->prepare( "SET @update_code := 0;
                UPDATE " . $wpdb->prefix . "my_table SET status = 1, code = (SELECT @update_code := code)
                WHERE campaign_id = %d AND status IS NULL LIMIT 1;
                SELECT @update_code as code;
                ",$campaign_id ) );
return $coupon_code->code;
}

エラー

WordPress database error You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near
'UPDATE wp_my_table SET status = 1, code = (SELECT @update_code := code)' at line 2
for query: (runs perfectly in phpmyadmin)
SET @update_code := 0;
UPDATE wp_my_table SET status = 1, code = (SELECT @update_code := code)
WHERE campaign_id = 0 AND status IS NULL LIMIT 1;
SELECT @update_code as code;
1
webaholik

サブクエリ以外では、MySQLは一度に1つのクエリしか処理しません。 phpmyadminを介してSQLステートメントを実行すると、1つのクエリーが実行されます。 WordPressで同じことをするには、$wpdbオブジェクトごとに1つのクエリを使用するだけです(必要に応じてサブクエリを含めることができますが、ここでは必要ありません)。

0
webaholik