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语句创建了两行文本,但为了便于阅读,我将它们包装起来。

在我看来一切都很好!以下在 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字符。尝试对字符串的字节进行十六进制转储,看看是否有任何可疑之处:

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

如果您将变量的未知内容连接到 SQL 中,我强烈建议使用 MySQL 的预处理语句 API将变量作为参数传递给 MySQL,以避免 SQL 注入;这还将执行此类参数到目标列类型的基本类型转换 - 如果您需要更多地控制变量的清理,则需要在将参数传递给 MySQL 之前在应用程序中执行此操作。

于 2012-05-09T09:22:58.570 回答