Php 无法使用MSSQL在PDO中引用表名
我必须为一个游戏使用某个人的数据库,不幸的是,这个游戏有一个名为“User”或[dbo][User]的表,这个表不能重命名。 现在,我需要在PHP中使用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
$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时,这个语句也不起作用。。。