0

したがって、私は1つのサーバーから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."';"); 

面白いのは、クエリが実行され、DBが更新されたことです。ただし、ターミナルから実行すると、これらの警告が表示されます。そして、私はそれらを取り除きたいです!MSSQLを使用する必要があります!!

解決策を探し回ってみましたが、人々はMS SQLをほとんど使用しておらず、mySQLの方がはるかに優れています(少なくとも広く使用されているという点では)。何か助けはありますか?

おもしろいこと:DBに接続して、新しいphpスクリプトでこのクエリを実行するだけの場合、正常に機能し、警告は表示されません。なぜこんな感じなのかわからない!

解決済み: 文字列への入力パラメーター(かなりラメ)をテストする必要はありませんでした。なぜなら、自分が何をしているかについて非常に自信があったからです。どんなに自信があっても(大声で叫ぶだけで)、常に特別な文字をエスケープしてください!!

4

1 に答える 1

4

入力文字列の1つに引用符が含まれているように思われますが、これはクエリを台無しにしています。あなたのエラーもこれを示しています。考えられるすべてのユーザー入力を常に汚染されたものとして扱い、必要がないと思われる場合でも、毎回それらをサニタイズする習慣をつける必要があります。

新しい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関数は置き換えであり、最低限使用する必要があるものです。

あなたはMSSQLについて言及しています。それを使用する予定の場合、MySQLi関数を使用することはできません。その場合は、MySQLとMSSQLの両方で機能するPDOインターフェイスを使用することをお勧めします。MySQLのみを使用している場合でも、多くの人がMySQLiよりもPDOを推奨しています。

于 2013-01-29T16:13:41.647 に答える