小编典典

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

sql

我必须为某游戏使用某人的数据库,该数据库可悲的是有一个名为“ 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();
    }

阅读 161

收藏
2021-05-30

共1个答案

小编典典

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

所以以下应该工作…

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

旁注 -如果您的YahooId曾经来自用户可以操纵的来源(例如$_GET),则应使用PDO研究“准备好的语句”

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

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

$statement->execute(array($userinput));
2021-05-30