Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL和PostgreSQL引用字段名之间的PHP PDO兼容性_Php_Mysql_Postgresql_Pdo - Fatal编程技术网

MySQL和PostgreSQL引用字段名之间的PHP PDO兼容性

MySQL和PostgreSQL引用字段名之间的PHP PDO兼容性,php,mysql,postgresql,pdo,Php,Mysql,Postgresql,Pdo,我的源代码是: $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("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驱动程序的`或'用法?

在这两种情况下都不需要反勾号:
select*from ant_Action将起作用。如果你必须使用背部的蜱虫,你可能会走运

您可以使用
preg_replace()
将查询中的反勾号改为双引号,但这很容易出错

编辑的pozs是正确的。不要那样做

如何使用PDO来抽象基于DB驱动程序的`或'用法


现在.PDO无法实现这些功能。您可以使用一个框架(Zend framework的Zend\Db非常适合),或者使用ISO SQL语法,您可以(f.ex.name列只使用不带引号的字符)

为什么需要引用表名?它不是保留字。您是否像
create table那样创建了表ant_Action“
?不过这应该使其区分大小写。创建时是否双引号?这很好地解释了这一点:是的,我在创建过程中双引号…这是一个项目要求。可能解决方法是执行bindParam()使用表名本身?在执行语句绑定时,可能知道足够多的信息来引用它。是的,这可能是一个很好的解决方法,但我正在搜索一些可以保留大量查询到预先存在的codeNope的内容,出于兼容性的原因,postgres将所有未引用的标识符都小写,并且
ant_action
不确定是否可以使用这是否意味着下划线需要引用?不理解这里的根问题。啊,现在看到你的其他评论。明白了。不,需要特殊字符(如非字母数字或下划线,f.ex.“-”)但是你也使用大写字母,这是有问题的,请看我对@Michael的答案的评论,或者这里