table_name
の複合フォームと、column_name
フィールドのコレクションを作成して、後で一時データベーステーブルを作成するのに使用します。しかし、頻繁に私はこのエラーでCRITICAL電子メールのログを受信したい:フィールド名の確認MySQLの予約語
[42000][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 'CHECK' at line 1
ユーザーはMySQLの予約語の一つとして、テーブル名や列名のいずれかを書いたときCREATE TABLE
文は失敗したようにこれが見えます。
したがって、テーブル名とカラムを保存する前に、この種のキーワードを避けるコールバックバリデーターを作成します。これは、これまでの私の方法です:
public function validTableName($name)
{
try {
$this->em->getConnection()->executeQuery('SELECT TRUE AS '.$name);
} catch (\Exception $except) {
return true;
}
return false;
}
それは正常に動作しますが、それは完全に安全ではないとSQLインジェクションになりやすいのです。私はMySQLの予約語の完全なリストをコピーするように誘惑されましたが、それは私には良い選択肢として感じていません...
名前を知る簡単な方法はMySQL予約語ですか?
ことができます:この1つは、すでにさまざまなプラットフォームをサポートして
:あなたは本当にそれを検証したい場合でも、..あなたは、任意のクエリせずに安全な方法でそれを行うために教義DBAL層を使用することができます予約語を心配する必要がないように、テーブル作成スクリプトの回りにバッククイックを追加するだけです。 – JNevill
あなたはおそらく作成メソッドを使ってSQLインジェクションを開いていましたか? – chris85