首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO强迫SQL99

问PDO强迫SQL99
EN

Stack Overflow用户
提问于 2014-05-06 19:43:26
回答 2查看 112关注 0票数 0

我正在使用PDO连接到一个MySQL数据库,如下所示。

代码语言:javascript
复制
    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遵从模式,以拒绝任何不遵循该标准的查询?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-06 20:01:11

您可以使用类似的查询指定mysql sql_mode

代码语言:javascript
复制
SET SESSION sql_mode = 'xxx'

其中xxx是有效sql模式之一。

有一个sql模式,它使MySQL的行为更像一个标准兼容的DBMS。虽然它只是“更像”的“不”的。

您可以阅读有关可能的sql模式在手册中。组合的sql模式是有趣的。

还有一个专用于标准遵守情况的手册页面,它将sql_mode="ansi"命名为一个选项。

我不知道用纯PDO和/或没有这个设置来实现类似的东西的方法。

票数 2
EN

Stack Overflow用户

发布于 2014-05-06 20:08:05

不是的。PDO不解析、强制或重写SQL语法。除了允许命名查询参数之外,这不是SQL-99标准。

@GhostGambler回答说,MySQL有一个SQL_MODE变量,它允许我们启用一些语法和语义的特性来更好地符合SQL-99,但这是不完整的。

即使在SQL_MODE=ANSI中,MySQL仍然允许许多特定于MySQL的特性,而不是SQL-99。例如:

  • REPLACE
  • INSERT...ON DUPLICATE KEY UPDATE
  • INSERT...SET column=value
  • LIMIT条款
  • 多表连接UPDATE和DELETE
  • 大多数内置的SQL函数
  • CREATE TABLE选项
  • 像SET和ENUM这样的数据类型
  • 等。

无论如何,您都不希望拒绝任何不遵循SQL-99的查询。例如,这意味着您将不能使用CREATE INDEX (通常情况下,索引以及管理索引所需的任何语句都保留为实现细节,而不是由SQL标准指定)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23503571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档