我希望用全名的“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']));
答案 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']。“%'”...... 使用简单引号内的%符号。