我正在使用PDO连接到一个MySQL数据库,如下所示。
try {
$this->myDBH = new PDO("mysql:host={$db_host};dbname={$db_name}", $db_user, $db_pass);
$this->myDBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (Exception $e) {
$cameralife->error('Database error: ' . htmlentities($e->getMessage()));
}我是否可以启用“严格”的SQL-99遵从模式,以拒绝任何不遵循该标准的查询?
发布于 2014-05-06 20:01:11
发布于 2014-05-06 20:08:05
不是的。PDO不解析、强制或重写SQL语法。除了允许命名查询参数之外,这不是SQL-99标准。
@GhostGambler回答说,MySQL有一个SQL_MODE变量,它允许我们启用一些语法和语义的特性来更好地符合SQL-99,但这是不完整的。
即使在SQL_MODE=ANSI中,MySQL仍然允许许多特定于MySQL的特性,而不是SQL-99。例如:
REPLACEINSERT...ON DUPLICATE KEY UPDATEINSERT...SET column=valueLIMIT条款UPDATE和DELETECREATE TABLE选项SET和ENUM这样的数据类型无论如何,您都不希望拒绝任何不遵循SQL-99的查询。例如,这意味着您将不能使用CREATE INDEX (通常情况下,索引以及管理索引所需的任何语句都保留为实现细节,而不是由SQL标准指定)。
https://stackoverflow.com/questions/23503571
复制相似问题