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

时间:2014-01-25 08:04:56

标签: 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 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();
    }

1 个答案:

答案 0 :(得分:1)

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

所以以下内容应该有效......

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

旁注 - 如果您的YahooId来自可由用户操作的来源(例如$ _GET),您应该使用PDO研究Prepared Statements ...

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

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

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