You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ERP关联SQL Server表名含空格,PHP查询报Invalid object name错误求助

解决SQL Server表名带空格和$符号的PHP连接报错问题

我一眼就看出问题所在了!你遇到的Invalid object name 'Lareco Live'错误,根本原因是PHP双引号字符串的变量解析特性搞的鬼!

你写的SQL语句用了双引号包裹:

$sql = "select No_, Description from [Lareco Live$Lead] with (nolock) ";

在PHP中,双引号里的$Lead会被当作一个变量来解析,但你并没有定义这个变量,所以它会被替换成空字符串。最终发送给SQL Server的SQL语句其实变成了:

select No_, Description from [Lareco Live] with (nolock) 

这就难怪数据库找不到名为Lareco Live的对象了——它要找的[Lareco Live$Lead]被硬生生截断了!

解决方案:

有两种简单的修复方式,选哪种都可以:

1. 使用单引号包裹SQL语句

单引号字符串在PHP中不会解析变量,能完整保留你的表名:

// 改用单引号,避免变量解析
$sql = 'select No_, Description from [Lareco Live$Lead] with (nolock) ';

2. 转义双引号里的$符号

如果坚持用双引号,给$加个反斜杠转义,告诉PHP这只是普通字符:

$sql = "select No_, Description from [Lareco Live\$Lead] with (nolock) ";

修改后的完整代码示例

// Establishes the connection
$dbh = sqlsrv_connect($serverName, $connectionOptions);
if ($dbh === false) {
    echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
    exit;
}
// 这里用单引号版本修复了表名解析问题
$sql = 'select No_, Description from [Lareco Live$Lead] with (nolock) ';
$getResults = sqlsrv_query($dbh, $sql);
if ($getResults === false) {
    echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
    exit;
}

另外额外提醒下:如果你的数据库还有指定的架构(比如dbo),也可以把表名写全,比如[dbo].[Lareco Live$Lead],这样更保险,但当前问题的核心还是PHP的变量解析导致表名被篡改。

内容的提问来源于stack exchange,提问作者Ivan Pudic

火山引擎 最新活动