複雑なクエリを構築する場合、多くの場合、テーブル名を動的に指定することが必要になります。ただし、生のテキスト連結を使用すると、構文エラーや脆弱性が発生する可能性があります。この記事では、準備されたステートメントを使用した別のアプローチを検討し、発生した特定のエラーに対する段階的な解決策を提供します。
エラーが発生しました
エラー [ Err] 1064 - SQL 構文にエラーがあります... MySQL が生のテキスト連結を使用して構築されたテーブル名を直接評価できないために発生します。
解決策: 準備されたステートメント
準備されたステートメントを使用すると、SQL 構文が有効なままであることを確認しながら、クエリを動的に構築して実行できます。これらを使用してエラーを解決する方法は次のとおりです:
動的テーブル名を定義します:
SET @id := '47'; SET @table := concat(@id, '_2013_2014_voucher');
クエリ文字列の構築:
SET @qry1 := concat('select * from ', @table);
ステートメントの準備:
prepare stmt from @qry1;
ステートメントの実行:
execute stmt;
削除クエリの繰り返し:
SET @qry2 := concat('DELETE FROM ', @table, ' WHERE>
プリペアドを利用するステートメントを使用すると、動的テーブル名を効果的に処理し、生のテキストの連結に関連する構文エラーを排除できます。このアプローチはデータベースのベスト プラクティスに準拠し、コードのセキュリティを強化します。
以上がSQL ステートメントでテーブル名を動的に指定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。