変数テーブル名を必要とする MySQL クエリを実行すると、質問で報告されているようなエラーが発生する可能性があります。この記事の目的は、プリペアド ステートメントの使用法を調査し、この特定の問題に対する解決策を提供することです。
エラーには、「[Err] 1064 - You have an error in your SQL 構文」は、MySQL サーバーがクエリ構文を正しく解釈できないことを示します。クエリ ステートメント内で変数 "@table" を直接使用したことが原因である可能性があります。
プリペアド ステートメントは、変数テーブル名を含む動的クエリを処理するための信頼できるアプローチを提供します。これらを使用すると、クエリ テンプレートを定義し、後で値を動的に置き換えることができます。この場合、CONCAT 関数を使用してクエリ テンプレートを定義し、変数テーブル名を構築できます。
次の手順を検討してください。
SET @id := '47'; SET @table := CONCAT(@id, '_2013_2014_voucher'); SET @qry1 := CONCAT('SELECT * FROM ', @table);
これにより、動的クエリ テンプレートが変数 @qry1.
次に、PREPARE コマンドを使用してステートメントを準備します:
PREPARE stmt FROM @qry1;
これで、必要に応じて別のテーブル名を置き換えて、準備されたステートメントを複数回実行できます:
EXECUTE stmt;
同じアプローチを削除クエリに適用できます。 CONCAT を使用して動的クエリ テンプレートを構築し、上記のように準備するだけです。
SET @qry2 := CONCAT('DELETE FROM ', @table, ' WHERE id = @id');
MySQL で動的テーブル名を持つプリペアド ステートメントを使用すると、可変テーブル名を持つクエリを効率的に実行できます。そしてエレガントに。文字列の連結には CONCAT 関数を使用し、クエリの柔軟性とパフォーマンスを向上させるためにプリペアド ステートメントの機能を活用することを忘れないでください。
以上がMySQL で変数テーブル名を使用して動的クエリを構築するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。