我建立以化合物的形式与table_name
和将用于随后建立的时态数据库表column_name
领域的集合。但是经常我会收到重要电子邮件日志与此错误:验证字段名阿恩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的保留字或不?
你能只需在表格创建脚本中添加反引号,以便不必担心保留字? – JNevill
您可能已经开放SQL注入与创建方法,没有? – chris85