2

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

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

我试图在互联网上搜索这个,但我找不到任何东西。请让我知道这件事。

谢谢你。

4

4 回答 4

1

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

于 2013-05-23T20:40:20.307 回答
0

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

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

于 2013-05-23T20:43:05.360 回答
0

本文所述,唯一提到的区别,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语句的极少数协议之一。大多数其他数据库供应商不会费心将这些信息透露给客户端,因为这会在他们的实现中产生更多开销。

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

于 2013-05-23T20:47:01.130 回答
0

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

于 2013-05-23T20:49:30.687 回答