有人告诉我,在使用 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)语法。