2010-12-02 16 views
0

我不能找到一个解释这种行为(SQL Server 2008中+ PHP 5.2.14)mssql_query奇怪的行为:自动删除列值附近的双引号(和列类型是“整数”)?

- 这一段代码工作正常:

$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是一个i​​nt键入的列,因此如果您将该查询复制并粘贴到sql server查询控制台上,则会出现以下错误:“列名'727'无效”。

我不知道为什么通过mssql_query工作,就好像php_mssql驱动程序删除这些双引号... 我敢肯定它与php_mssql驱动程序,而不是一些其他的php.ini物业办,因为如果我执行该查询使用php_sqlsrv驱动程序,我通过sql server查询控制台(“列名无效”)得到相同的错误。

任何帮助,将不胜感激。

回答

1

请参阅联机丛书中的SET QUOTED_IDENTIFIER。当它被设置为ON时,双引号被解释为标记identifier;当它关闭时,双引号标记一个文字值。 ODBC和OLE DB在默认情况下将其设置为ON,但不同的库可以按照自己喜欢的方式进行操作,如果需要,可以自行将其明确设置。

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