我使用了教程中的PHP代码并且工作正常。但是当我把它重写给我时它会让我无效。这段代码给了我想要的东西,我的意思是它以JSON格式提供数据:
$q=mysql_query("SELECT * FROM people WHERE birthyear>'".$_REQUEST['year']."'");
while($e=mysql_fetch_assoc($q))
$output[]=$e;
print(json_encode($output));
但是这个代码即使看起来相同也不起作用,它给出了null:
$q=mysql_query("SELECT username, firstname, lastname, email, phone1, skype, city, description
FROM mdl_user WHERE username LIKE'".$_REQUEST['usern']."'");
while($e=mysql_fetch_assoc($q))
$output[]=$e;
print(json_encode($output));
如果我不使用$ _REQUEST ['usern']并且正在使用JSON获取数据。但我需要使用请求来搜索特定数据。那么问题出在哪里呢?因为我信任不明白。它看起来和我一样。
答案 0 :(得分:0)
使用LIKE
创建一个使用%
的模式。把它放在或任何一端,开始或结束。
$username = mysql_real_escape_string($_REQUEST['usern']);
$q=mysql_query("SELECT username, firstname, lastname, email, phone1, skype, city, description
FROM mdl_user WHERE username LIKE '$username%'");
^
|
// You also missed this space --+
注意您的查询对SQL注入是开放的。试想是否有人将年份作为'; drop table people; --
插入。使用mysql_real_escape_string来清理这些字段。
最好明确使用$ _POST或$ _GET,这样可以确保您的数据来自正确的来源。
答案 1 :(得分:0)
使用LIKE
,您可以在模式中使用以下两个通配符。
% Matches any number of characters, even zero characters
_ Matches exactly one character
答案 2 :(得分:-1)
我认为你没有得到任何结果,因为你的用户名与$ _REQUEST ['usern']不完全相同,这就是你首先使用LIKE的原因。因此,您应该放置通配符来告诉MySQL在字符串之前或之后查找任何字符(%),例如:
LIKE '%".$_REQUEST['usern']."%'
请记住,这是低效的,你应该尝试在字符串后只使用一个%(如果这对你有用),或者更好的是,找到另一种方法来搜索表。
编辑:同样作为注释中的用户而我没有提及,这个特定的代码容易受到SQL注入的攻击。在将变量传递给查询之前,您应该清理变量$ _REQUEST ['usern']。