2017-04-26 7 views
0

私はPDOでprepared statementを使用していましたが、テーブル名をバインドできないことがわかりました。私は何かを使用することができます$sql = "select * from $table_name where something = :something"変数としてのテーブル名

$ table_name変数がクエリを実行し、データベースから値を取得することによってメソッドによって内部的に割り当てられる場合、このメソッドは安全ですか?あるいは、可変テーブル名を持つことは悪い習慣ですか?それが意見に基づいている場合、私はあなたの意見を知りたいと思います。

答えて

0

動的テーブル名を使用する必要がある状況があるため、これは受け入れられる方法です。個人的には、この要件が必須かどうかを確認し、そうでない場合は、クエリのテーブル名をハードコードします。

テーブル名がユーザーの入力に由来する場合、セキュリティ対策としてホワイトリストを使用します:mysqlのinformation_schemaからテーブル名のリストを取得し、アプリケーションコードの入力と比較して、 。

テーブル名がmysqlのinformation_schemaから来ている場合、それはそれです。これはそれが有効なテーブル名であるため、それ以上のチェックなしで使用できます。名前の周りにバッククイックを入れてください。

テーブル名がアプリケーションによって作成されたテーブルから来ている場合は、単にinformation_schemaを介してテーブルのリストを取得し、それがアプリケーションコード内に存在するかどうかを確認します。これにより、テーブル名が有効であることが保証されます。

関連する問題