这个简单的PHP SQL语句有什么问题?

时间:2010-12-12 20:21:53

标签: php sql mysql mysql-error-1064

我希望用全名的“blo”来记录所有用户,例如:“Pablo”

我使用user PHP参数传递“blo”参数:

$q=mysql_query("select * From user Where fullName Like '%'".$_REQUEST['user']."'%'",$link );
php SQL语句中有些错误,因为当我在我的SQL数据库上尝试带有参数“blo”的句子时,我看到SQL语句是正确的,因为它返回了我正确的结果,这是一句话关于它的论点“blo”:select * From user Where fullName Like "%blo%"

我确信PHP正确接收“blo”参数,然后,它必须是PHP上SQL语句的sintax错误....但我找不到它

编辑:好的!!最后一句话已经解决,但现在我有这个新句子有同样的问题,它有一个错误,但我不知道在哪里

$query = sprintf("SELECT u.* 
                    FROM USER u
                   WHERE u.fullName LIKE '%%%s%%' AND email NOT IN (select pp.fk_email2 from permission pp where pp.fk_email1='".mysql_escape($_REQUEST['mymail'])."') AND email NOT LIKE  '".mysql_escape($_REQUEST['mymail'])."' ",
                  mysql_real_escape_string($_REQUEST['user']));

5 个答案:

答案 0 :(得分:6)

SQL需要单引号来指示要进行比较的字符串,并且通配符(%)必须包含在这些单引号内。双引号仅用于列和表别名,如果有的话。

$query = sprintf("SELECT u.* 
                    FROM USER u
                   WHERE u.fullName LIKE '%%%s%%'",
                  mysql_real_escape_string($_REQUEST['user']));

$q = mysql_query($query, $link);

其次,你要离开自己open to a SQL injection attack by not sanitizing the user request variable。处理提交给MySQL数据库的字符串时,始终使用mysql_real_escape_string。

答案 1 :(得分:1)

你的报价搞砸了。用这个:

$q=mysql_query('SELECT * 
                FROM user
                WHERE fullName LIKE "%' . $_REQUEST['user'] . '%"',$link );
顺便说一句,这是不好的做法。您在查询中使用了未转义的输入,并且可以使用SQL注入。

答案 2 :(得分:1)

看起来您的报价已关闭..尝试类似......

$q=mysql_query("select * From user Where fullName Like '%".$_REQUEST['user']."%'",$link);

此外,您需要确保传入的参数是sql-escaped以防止sql注入。我不知道php,但它可能类似于......

$q=mysql_query("select * From user Where fullName Like '%".mysql_escape($_REQUEST['user'])."%'",$link);

答案 3 :(得分:0)

@ AndroidUser99:将查询更改为 -

$q = mysql_query("select * from user Where fullName like '%" . $_REQUEST['user'] . "%'", $link);

<强>更新

我认为我们可能需要更多代码,因为没有一个答案似乎“有效”。数据库链接是否在$link中实例化了?如果有错误是什么?

答案 4 :(得分:0)

我认为必须是...其中全名如'%'。$ _REQUEST ['user']。“%'”...... 使用简单引号内的%符号。