繁体   English   中英

php select 声明没有给出答案

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM