【问题标题】:Using Php PDO Insert statement使用 PHP PDO 插入语句
【发布时间】:2013-05-19 08:58:31
【问题描述】:

有人告诉我,当您使用 PDO 时,您不能使用“INSERT INTO .... SET”将数据插入数据库,因为它不适用于 MySQL 以外的数据库。我不确定他到底是什么意思,也许他的意思是我应该使用其他插入方法,例如,

INSERT INTO table (column1, column2) VALUES (?, ?)

我尝试在互联网上搜索此内容,但找不到任何内容。请让我知道这件事。

谢谢。

【问题讨论】:

    标签: php database pdo insert


    【解决方案1】:

    INSERT INTO ... SET 语法不是 ANSI SQL 标准的一部分,因此在不同的 RDBMS 实现中不受广泛支持。如果您正在设计应用程序以使其与 MySQL 紧密耦合,那么使用这种语法就可以了。如果您尝试设计使您的应用程序与 RDBMS 实现不紧密耦合,那么您应该使用更标准的 INSERT INTO table (columns) VALUES (values) 语法。

    【讨论】:

    • 谢谢。你的回答和下面的回答真的很有帮助。
    【解决方案2】:

    this 中所述,唯一提到的区别,b/n mysql 驱动程序和其他如下所述。假设这是一个简单的查询:

    <?php
    $stmt = $db->query('SELECT * FROM table');
    $row_count = $stmt->rowCount();
    echo $row_count.' rows selected';
    

    现在,让我们阅读文档如何说明该查询如何/为什么只能在 mysql 驱动程序时返回 affected_rows 的计数

    注意:虽然文档说此方法仅用于返回 来自UPDATEINSERTDELETE 查询的受影响行,使用 PDO_MYSQL 驱动程序(仅限此驱动程序)您可以获得SELECT 的行数 查询。为多个数据库编写代码时请记住这一点。

    这是因为 MySQL 的协议是提供此功能的极少数协议之一 向客户提供SELECT 语句的信息。大多数其他数据库 供应商不会费心将这些信息泄露给客户,因为它 会在他们的实现中产生更多的开销。

    所以,据我所知,差别不大。

    【讨论】:

    • 很高兴知道这一点。谢谢。
    • 这与提出的问题有什么关系?
    • 与问题相关
    【解决方案3】:

    您应该使用INSERT INTO table (column1, column2) VALUES (?, ?) 语句而不是INSERT INTO table SET column1=? 语句,因为这是基于SQL 的数据库语言的正确语法。虽然MySQL accepts it,但其他人可能不会。

    【讨论】:

      【解决方案4】:

      PHP PDO 中的位置参数就可以了。另一个选项是命名参数。如果我从我在 PDO C 代码中看到的内容中没有记错的话,是 PHP 而不是 DBM 进行了替换。

      http://php.net/manual/en/pdo.prepared-statements.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-05
        • 2014-12-14
        • 2014-08-12
        • 1970-01-01
        • 2015-02-22
        • 2016-03-02
        • 2013-11-09
        • 1970-01-01
        相关资源
        最近更新 更多