1

我使用了教程中的 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 格式获取数据。但我需要使用 request 来搜索特定数据。那么问题可能出在哪里。因为我完全不明白。在我看来是一样的。

4

3 回答 3

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,这样可以确保您的数据来自正确的来源。

于 2012-04-08T06:57:35.920 回答
0

您可以在LIKE模式中使用以下两个通配符。

%   Matches any number of characters, even zero characters
_   Matches exactly one character
于 2012-04-08T07:00:18.117 回答
-1

我假设您没有得到任何结果,因为您的用户名与 $_REQUEST['usern'] 不完全相同,这就是您首先使用 LIKE 的原因。因此,您应该放置通配符来告诉 MySQL 在您的字符串之前或之后查找任何字符 (%),例如:

LIKE '%".$_REQUEST['usern']."%'

请记住,这是低效的,您应该尝试在字符串后仅使用 % (如果这对您有用),或者更好的是,找到另一种搜索表格的方法。

编辑:同样作为评论中的用户,我没有提到,这个特定的代码容易受到 SQL 注入的攻击。您应该在将变量 $_REQUEST['usern'] 传递给查询之前对其进行清理。

于 2012-04-08T06:54:00.910 回答