我无法找到对此行为的解释(SQL Server 2008 + PHP 5.2.14)
- 这段代码可以正常工作:
$query=' select id from News..news where id="727" ';
$conn=mssql_connect("myDDBBServer","user","password");
$idQuery=mssql_query($query);
$row=mssql_fetch_array($idQuery);
echo $row[0]
我必须说id是一个int类型的列,所以如果你在sql server查询控制台上复制并粘贴该查询,就会出现以下错误:“列名'727'无效”。
我不知道为什么通过mssql_query工作,似乎php_mssql驱动程序正在删除那些双引号... 我确定它与php_mssql驱动程序有关,而不是其他一些php.ini属性,因为如果我使用php_sqlsrv驱动程序执行该查询,我会得到与通过sql server查询控制台相同的错误(“列名无效”)
任何帮助都将不胜感激。
答案 0 :(得分:1)
在联机丛书中查看SET QUOTED_IDENTIFIER。当它设置为ON时,双引号被解释为标记为identifier;当它为OFF时,双引号标记一个字面值。默认情况下,ODBC和OLE DB将其设置为ON,但不同的库可以执行他们喜欢的操作,如果需要,可以自己设置它。
更大的图片是你不应该在SQL中嵌入文字值。相反,您应该使用参数化查询(但它们在您的特定客户端库中工作),因为它避免了SQL注入,引用和数据类型转换的问题。