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