0

この正確なコードは以前は私の古いマシンで機能していましたが、このエラーが(Mac OSX 10.7で)返ってきます。

Cコードは次のとおりです。

printf("%s\n",query);

if (mysql_query(conn,query)){
    fprintf(stderr, "%s\n", mysql_error(conn)); 
}

出力は次のとおりです。

INSERT INTO comment (unum,cat_subject,cat_major,cat_minor,unmod) 
 VALUES (1,1,1,0,'The cat was lazy.') 

You have an error in your SQL syntax; 
 check the manual that corresponds to your MySQL server version 
 for the right syntax to use near ','The cat was lazy.')' at line 1

元のprintfステートメントは2行のテキストを作成しますが、読みやすくするためにそれらをラップしました。

それはすべて私にはうまく見えます!以下は、同じテーブルに対してPHPで機能します(正しいbindParamステートメントを使用)。

$STH=$DBH->prepare("INSERT INTO comment (unum,cat_subject,cat_major,cat_minor,unmod) VALUES (:u,:s,:ma,:mi,:t)");

どうしたの?

"(ところで:代わりに試してみました'が、違いはありませんでした。)

4

1 に答える 1

2

回答へのアップグレード

queryおそらく文字の後に、印刷できない文字が含まれている可能性があります0。文字列のバイトを16進ダンプして、疑わしいものがないかどうかを確認してください。

char* c;
for (c=query; *c; c++) printf("%02x",*c);

未知の変数の内容をSQLに連結する場合は、SQLインジェクションを回避するために、 MySQLのプリペアドステートメントAPIを使用して、変数をパラメーターとしてMySQLに渡すことを強くお勧めします。これにより、このようなパラメーターの宛先列タイプへの基本的な型変換も実行されます。変数のクレンジングをさらに制御する必要がある場合は、パラメーターをMySQLに渡す前に、アプリケーションでそのような変換を実行する必要があります。

于 2012-05-09T09:22:58.570 に答える