有一个函数如下://通过用户名获取其它字段
void do_query(const char* name)
{
char buf[256];
sprintf(buf, "select * from account where user_name = '%s', name)
//
// do real query
//
}
这个SQL语句有被注入的危险,于是我用了mysql_real_escape_string()函数来转义。可是这样以后输入正常的用户名也不行了,比如:
do_query("mike")产生的SQL就是: select * from account where user_name = \'mike\'MySQL服务器会爆出下面的错误信息:
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 '\'mike\'' at line 1
这个问题该如何解决呢?
既能用转义来防注入,又能维持正常的运行。
void do_query(const char* name)
{
char buf[256];
sprintf(buf, "select * from account where user_name = '%s', name)
//
// do real query
//
}
这个SQL语句有被注入的危险,于是我用了mysql_real_escape_string()函数来转义。可是这样以后输入正常的用户名也不行了,比如:
do_query("mike")产生的SQL就是: select * from account where user_name = \'mike\'MySQL服务器会爆出下面的错误信息:
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 '\'mike\'' at line 1
这个问题该如何解决呢?
既能用转义来防注入,又能维持正常的运行。
面不是去处理那个SQL语句。