有人告诉我,在使用 PDO 时,不能使用“INSERT INTO .... SET”将数据插入数据库,因为它不适用于 MySQL 以外的数据库。我不确定他到底是什么意思,也许他的意思是我应该使用其他插入方法,例如,
INSERT INTO table (column1, column2) VALUES (?, ?)
我试图在互联网上搜索这个,但我找不到任何东西。请让我知道这件事。
谢谢你。
您应该使用INSERT INTO table (column1, column2) VALUES (?, ?)
语句而不是INSERT INTO table SET column1=?
语句,因为这是基于 SQL 的数据库语言的正确语法。虽然MySQL 接受它,但其他人可能不接受。
PHP PDO 中的位置参数很好。另一个选项是命名参数。如果我从我在 PDO C 代码中看到的内容中没有记错的话,是 PHP 而不是 DBM 进行了替换。
如本文所述,唯一提到的区别,b/n mysql驱动程序和其他如下所述。假设这是一个简单的查询:
<?php
$stmt = $db->query('SELECT * FROM table');
$row_count = $stmt->rowCount();
echo $row_count.' rows selected';
现在,让我们阅读文档如何说明该查询如何/为什么affected_rows
只能在 mysql 驱动程序时返回计数
注意:虽然文档说此方法仅用于从
UPDATE
,INSERT
,DELETE
查询返回受影响的行,但使用 PDO_MYSQL 驱动程序(仅此驱动程序)您可以获得SELECT
查询的行数。在为多个数据库编写代码时请记住这一点。这是因为 MySQL 的协议是向客户端提供此信息以供
SELECT
语句的极少数协议之一。大多数其他数据库供应商不会费心将这些信息透露给客户端,因为这会在他们的实现中产生更多开销。
所以,据我所知,差别不大。
该INSERT INTO ... SET
语法不是 ANSI SQL 标准的一部分,因此在不同的 RDBMS 实现中不受广泛支持。如果您正在设计应用程序以使其与 MySQL 紧密耦合,那么使用这种语法就可以了。如果您试图设计使您的应用程序与 RDBMS 实现不紧密耦合,那么您应该使用更标准的INSERT INTO table (columns) VALUES (values)
语法。