[英]php select statement doesn't give answer
我使用了教程中的 php 代码,它运行良好。 但是当我重写给我时,它给了我 null。这段代码给了我我想要的,我的意思是它提供了 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 中获取数据。但是我需要使用请求来搜索特定数据。 那么问题出在哪里。 因为我完全不明白。 在我看来是一样的。
要使用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; --
'; drop table people; --
'; drop table people; --
。 使用mysql_real_escape_string清理这些字段。
最好明确使用 $_POST 或 $_GET,这样可以确保您的数据来自正确的来源。
使用LIKE
,您可以在模式中使用以下两个通配符。
% Matches any number of characters, even zero characters
_ Matches exactly one character
我假设您没有得到任何结果,因为您的用户名与 $_REQUEST['usern'] 不完全相同,这就是您首先使用 LIKE 的原因。 因此,您应该放置通配符以告诉 MySQL 在您的字符串之前或之后查找任何字符 (%),例如:
LIKE '%".$_REQUEST['usern']."%'
请记住,这是低效的,您应该尝试在字符串后仅使用一个 %(如果这对您有用),或者更好的是,找到另一种搜索表的方法。
编辑:同样作为用户在评论中指出但我没有提及,这个特定的代码容易受到 SQL 注入的攻击。 您应该在将变量 $_REQUEST['usern'] 传递到查询之前对其进行清理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.