0

所以,我正在做很多事情,从一台服务器解析 XML,将内容写入另一台服务器,然后更新 mssql 数据库!整个过程似乎运行顺利,直到我为了好玩而从终端运行脚本!当我从终端运行它时,它会引发一堆警告,例如:

PHP Warning:  mssql_query(): message: Incorrect syntax near 's'. (severity 15) in 
/Volumes/Data/Users/username/Desktop/createXML.php on line 375

PHP Warning:  mssql_query(): General SQL Server error: Check messages from the SQL 
Server (severity 15) in /Volumes/Data/Users/username/Desktop/createXML.php on line 375

PHP Warning:  mssql_query(): message: Unclosed quotation mark after the character 
string ';'. (severity 15) in /Volumes/Data/Users/username/Desktop/createXML.php on line 375

PHP Warning:  mssql_query(): General SQL Server error: Check messages from the SQL 
Server (severity 15) in /Volumes/Data/Users/pdwivedi/Desktop/createXML.php on line 375

PHP Warning:  mssql_query(): Query failed in /Volumes/Data/Users/username/Desktop
/createXML.php on line 375

这是第 375 行:

$query = mssql_query("UPDATE table_name SET C_ITP_STATUS = '".$ITP_Status."', 
C_ITP_ERRORS = '". $ITP_Error ."' WHERE id = '".$ID."';"); 

有趣的是查询执行并且我有一个更新的数据库。但是,当从终端运行时,它仍然会显示这些警告。我想摆脱他们!我必须使用 MS SQL!

曾尝试四处寻找解决方案,但人们几乎不使用 MS SQL,而 mySQL 则要好得多(至少在被广泛使用方面)。有什么帮助吗?

有趣的事情:当我只连接到数据库并在新的 php 脚本中执行此查询时,它工作正常并且没有警告。不知道为什么会这样!

已解决: 我不想在字符串中测试我的输入参数(相当蹩脚),因为我对自己所做的事情非常有信心!无论你多么自信(只是大声喊叫),总是逃避特殊字符!

4

1 回答 1

4

在我看来,您的输入字符串之一可能包含引号,这会弄乱查询。您的错误也表明了这一点。您应该始终将所有可能的用户输入视为已污染,并养成每次都对其进行清理的习惯,即使您认为不需要这样做。

我创建了一个新的 php 脚本并对 3 个参数进行了硬编码,查询运行良好!

这也使我相信变量中某处的引号或特殊字符会弄乱查询。您可能想使用mysql_real_escape_string()来纠正这个问题。

$ITP_Status = mysql_real_escape_string($ITP_Status);
$ITP_Error = mysql_real_escape_string($ITP_Error);
$ID = mysql_real_escape_string($ID);
$query = mssql_query("UPDATE table_name SET C_ITP_STATUS = '".$ITP_Status."', C_ITP_ERRORS = '". $ITP_Error ."' WHERE id = '".$ID."';"); 

还应注意,您使用的是旧的 MySQL 函数。新的MySQLi函数是替代品,你应该至少使用它。

你提到了 MS SQL。如果您打算使用它,则不能使用 MySQLi 函数。在这种情况下,建议您使用PDO接口,该接口适用于 MySQL 和 MS SQL。许多人推荐 PDO 而不是 MySQLi,即使您只使用 MySQL。

于 2013-01-29T16:13:41.647 回答