SQL ステートメント内の動的テーブル名
動的テーブル名を使用して SQL クエリを実行するのは困難な場合があります。次の例を考えてみましょう。
SET @id := '47'; SET @table := @id+'_2013_2014_voucher'; SELECT * FROM @table; Delete FROM @table where>
このクエリは次のエラーをスローします。
[Err] 1064 - 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 '@table' at line 1
準備されたステートメントを使用した解決策
の推奨アプローチ動的テーブル名を処理するには、準備されたステートメントを使用します。プリペアド ステートメントを使用すると、適切な構文とセキュリティを確保しながら、テーブル名を動的に指定できます。 MySQL では、PREPARE ステートメントと EXECUTE ステートメントを次のように使用できます。
SET @id := '47'; SET @table := concat(@id,'_2013_2014_voucher'); set @qry1:= concat('select * from ',@table); prepare stmt from @qry1 ; execute stmt ;
CONCAT() 関数は、テーブル名の文字列を動的に連結するために使用されます。次に、準備されたステートメントが実行され、構文エラーが回避されます。
削除クエリへの適用
同じアプローチを削除クエリにも拡張できます。
SET @qry2:= concat('DELETE FROM ',@table,' where>
以上がMySQL で動的テーブル名を使用して SQL クエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。