Php 无法使用MSSQL在PDO中引用表名

Php 无法使用MSSQL在PDO中引用表名,php,sql,sql-server,pdo,quoting,Php,Sql,Sql Server,Pdo,Quoting,我必须为一个游戏使用某个人的数据库,不幸的是,这个游戏有一个名为“User”或[dbo][User]的表,这个表不能重命名。 现在,我需要在PHP中使用PDO访问此查询,并且在使用此查询时: $query = "SELECT UserId AS INTUSERID FROM dbo.User WHERE YahooId = 'abcdef'"; 它失败了,因为“User”是一个保留的关键字,所以不提取任何内容。通过MS SQL Server,我可以执行以下操作: SELECT UserId A

我必须为一个游戏使用某个人的数据库,不幸的是,这个游戏有一个名为“User”或[dbo][User]的表,这个表不能重命名。 现在,我需要在PHP中使用PDO访问此查询,并且在使用此查询时:

$query = "SELECT UserId AS INTUSERID FROM dbo.User WHERE YahooId = 'abcdef'";
它失败了,因为“User”是一个保留的关键字,所以不提取任何内容。通过MS SQL Server,我可以执行以下操作:

SELECT UserId AS INTUSERID FROM [GameName].[dbo].[User] WHERE YahooId = 'abcdef'
它是有效的。 我应该如何在PHP中准备查询以使其执行?我尝试在表名周围加上单引号,但没有效果。 正确的使用方法是什么

[GameName].[dbo].[User] 
从PHP PDO作为表名

更新: 这就是我连接的方式:

try{
    $conn = new PDO("xxx.rds.amazonaws.com,1150;Database=xyz","admin","password");
    } catch(PDOException $e){
        echo "Connection failed: " . $e->getMessage();
    }

继评论中的讨论之后,我提供了这一点,以便问题得到答案。我认为方括号可以在用于定义查询的php字符串中正常工作,所以我在自己使用PDO连接到MS-SQL的代码中对其进行了测试

所以下面的方法应该有效

$query=“从dbo中选择UserId作为INTUSERID。[User]其中YahooId='abcdef'

旁注-如果您的YahooId来自可由用户操纵的来源(如$\u GET),您应该使用PDO进行研究

$query = "SELECT UserId AS INTUSERID FROM dbo.[User] WHERE YahooId = ?;";

$statement= $db->prepare($query);

$statement->execute(array($userinput));

我认为这在中得到了回答,我已经尝试了PDO prepare,但这些线程似乎是针对参数的。在我的例子中,表名本身是一个保留关键字…@MrVimes尝试了backticks。。。没有效果。我回显了查询,并用反勾号显示,但没有执行。我删除了我的评论,因为我没有意识到你使用的是mssql而不是mysql。方括号不起作用吗?即$query=“从dbo中选择UserId作为INTUSERID。[User]其中YahooId='abcdef';我想测试一下自己,但我在ipad上:)谢谢Vimes先生。然而,在我的例子中,我不得不使用[dbName].[dbo].[User]。。。只有在没有[dbName]的情况下,它才适用于此。如果你能猜出原因,请告诉我。其他查询工作正常。无论如何,经过几个小时精彩的调试,战斗结束了…:)那个yahooId来自一个会话,所以我猜,没有安全漏洞。我正在为其他一些参数复杂的函数使用准备好的语句,但老实说,即使在我将表名作为bindParam时,这个语句也不起作用。。。