2

我的源代码是:

$db = new PDO("mysql:host=" . $host . ";dbname=" . $dbname, $username, $password);
$sth = $resourceLinkID -> prepare("SELECT * FROM `ant_Action`;");
$sth -> execute();
$result = $sth -> fetch(PDO::FETCH_ASSOC);
print_r($result);

^ 这有效!

$db = new PDO("pgsql:dbname=" . $dbname . ";user=" . $user . ";password=" . $password . ";host=" . $host);
$sth = $resourceLinkID -> prepare("SELECT * FROM `ant_Action`;");
$sth -> execute();
$result = $sth -> fetch(PDO::FETCH_ASSOC);
print_r($result);

^由于 ` 问题,这不起作用,在 PosgreSQL 中你必须使用 " 在这种情况下 ("ant_Action" )

如何使用 PDO 来抽象基于 DB DRIVER 的 ` 或 " 用法?

4

2 回答 2

1

在任何一种情况下都不需要反引号:select * from ant_Action;将起作用。如果您必须使用反勾号,您可能会不走运。

您可以使用preg_replace()将查询中的反引号转换为双引号,但这可能容易出错。

编辑pozs是对的。不要那样做。

于 2012-10-23T19:07:03.753 回答
1

如何使用 PDO 来抽象基于 DB DRIVER 的 ` 或 " 用法?

没办法。PDO 不具备这样的能力。您可以使用框架(Zend 框架的 Zend\Db 对它很有用),或者使用 ISO SQL 语法,您可以(例如,仅使用不带引号的字符命名列)

于 2012-10-23T19:08:09.367 回答