Php 使用奇怪的表名运行对MS SQL server的查询

Php 使用奇怪的表名运行对MS SQL server的查询,php,sql,sql-server,codeigniter,Php,Sql,Sql Server,Codeigniter,对于应用程序,我们需要连接到SQLServer2008来执行一些查询 我在一个Codeigniter框架上用PHP运行查询。我通过一个名为Microsoft SQL server management studio的程序访问此SQL数据库。这些表格有奇怪的名字和美元符号:例如TRP$Lease Car studio通过此查询获取数据: SELECT TOP 1000 * FROM [Mdatabase].[dbo].[TRP$Lease Car] 当我在PHP安装中运行此查询时,它在$si

对于应用程序,我们需要连接到SQLServer2008来执行一些查询

我在一个Codeigniter框架上用PHP运行查询。我通过一个名为Microsoft SQL server management studio的程序访问此SQL数据库。这些表格有奇怪的名字和美元符号:例如TRP$Lease Car

studio通过此查询获取数据:

SELECT TOP 1000 *
  FROM [Mdatabase].[dbo].[TRP$Lease Car]
当我在PHP安装中运行此查询时,它在$sign上失败:

像这样:

遇到一个PHP错误

严重性:通知

消息:未定义变量:Lease

文件名:views/welcome_message.php

行号:5发生数据库错误

错误号码:42S02

[Microsoft][SQL Server本机客户端11.0][SQL Server]对象无效 名称为“dbo.TRP”

从PHP运行查询时,我需要如何调用这些表

编辑


此问题仅出现在名称中有空格的表上。。。使用TRP$发票的查询有效。在这种情况下,我认为TRP$租赁汽车是个问题

这是因为您的查询包含双引号。当PHP遇到包含$something的双引号字符串时,它会将$something视为变量并尝试替换其值。在本例中,字符串中有TPR$Lease—PHP尝试解析变量$Lease—您尚未定义该变量—并给出您指示的警告消息。有两种处理方法

避开美元符号:从TPR\$Lease中选择*从而告诉PHP您确实需要美元符号

使用单引号字符串:“select*from TPR$Lease”-php不会在单引号字符串中进行变量替换

显然,根据您的特定模式调整实际的SQL语句

编辑:如果表格名称包含空格,则必须在表格名称周围使用方括号[…]:

"select * from [TPR\$Lease Car]"

但是请注意,这是MS SQL特定的语法。这在大多数其他数据库引擎上都不起作用,据我所知,只有MS允许在表名中使用空格。

这是因为您的查询使用双引号。当PHP遇到包含$something的双引号字符串时,它会将$something视为变量并尝试替换其值。在本例中,字符串中有TPR$Lease—PHP尝试解析变量$Lease—您尚未定义该变量—并给出您指示的警告消息。有两种处理方法

避开美元符号:从TPR\$Lease中选择*从而告诉PHP您确实需要美元符号

使用单引号字符串:“select*from TPR$Lease”-php不会在单引号字符串中进行变量替换

显然,根据您的特定模式调整实际的SQL语句

编辑:如果表格名称包含空格,则必须在表格名称周围使用方括号[…]:

"select * from [TPR\$Lease Car]"

但是请注意,这是MS SQL特定的语法。这在大多数其他数据库引擎上都不起作用,据我所知,只有MS允许在表名中使用空格。

是否尝试在字符串中的表名周围添加括号[]?查询从[dbo].[TRP$LeaseCar]中选择*;此问题仅出现在名称中有空格的表上。。。TRP$发票查询有效..@DanielE.-根本问题是在SQL查询运行之前PHP变量替换。SQL错误是PHP错误的结果。请看下面的答案。呵呵,这是一个很好的答案,但是SQL中表名中的空格仍然需要用括号括起来……您是否尝试在字符串中的表名周围添加括号[]?查询从[dbo].[TRP$LeaseCar]中选择*;此问题仅出现在名称中有空格的表上。。。TRP$发票查询有效..@DanielE.-根本问题是在SQL查询运行之前PHP变量替换。SQL错误是PHP错误的结果。看到下面的答案。呵呵,这是一个很好的答案,但是SQL中表名中的空格仍然需要括起来…@JelleP-你真的尝试过这个吗?这是正确的答案,即使在您编辑之后。@AleksG-当[]中的表名如此“奇怪”时,仍然值得保护它们。您的注释解决了PHP问题。谢谢你的邀请。但是SQL错误仍然存在:SELECT*FROM dbo.TPR\$LeaseCar@JelleP您需要实际思考,而不仅仅是复制/粘贴其他人的代码。您在直接放入MS SQL的第一条语句中使用了方括号,因此在PHP中使用相同的方括号。我更新了我的答案,括号没用。“一定是那样的。”杰勒普——你真的试过这个吗?这是正确的答案,即使在您编辑之后。@AleksG-当[]中的表名如此“奇怪”时,仍然值得保护它们。您的注释解决了PHP问题。谢谢你的邀请。但是SQL错误仍然存在:SELECT*FROM dbo.TPR\$LeaseCar@JelleP你
需要实际思考,而不仅仅是复制/粘贴别人的代码。您在直接放入MS SQL的第一条语句中使用了方括号,因此在PHP中使用相同的方括号。我更新了我的答案,括号没用。一定是那样的。