mssql_query奇怪的行为:自动删除列值周围的双引号(列类型是“整数”)?

时间:2010-12-02 10:48:34

标签: php sql-server

我无法找到对此行为的解释(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查询控制台相同的错误(“列名无效”)

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

在联机丛书中查看SET QUOTED_IDENTIFIER。当它设置为ON时,双引号被解释为标记为identifier;当它为OFF时,双引号标记一个字面值。默认情况下,ODBC和OLE DB将其设置为ON,但不同的库可以执行他们喜欢的操作,如果需要,可以自己设置它。

更大的图片是你不应该在SQL中嵌入文字值。相反,您应该使用参数化查询(但它们在您的特定客户端库中工作),因为它避免了SQL注入,引用和数据类型转换的问题。