Php 使用WHERE子句mysql\u query和mysql\u fetch\u数组进行基本搜索

Php 使用WHERE子句mysql\u query和mysql\u fetch\u数组进行基本搜索,php,mysql,search,Php,Mysql,Search,我是PHP和mysql的新手,想知道我是否可以在搜索数据库和返回结果的代码方面得到一些帮助。 添加mysql\u error()并检查查询中是否有任何错误 $result = mysql_query("SELECT * FROM torrents WHERE name ='$search'") or trigger_error(mysql_error()); 如果查询成功,则表可能没有任何匹配行 如果您不希望精确匹配并且希望近似匹配,则可以使用LIKE子句而不是= $re

我是PHP和mysql的新手,想知道我是否可以在搜索数据库和返回结果的代码方面得到一些帮助。

添加
mysql\u error()
并检查查询中是否有任何错误

$result = mysql_query("SELECT * FROM torrents WHERE name ='$search'")
          or trigger_error(mysql_error());
如果查询成功,则表可能没有任何匹配行

如果您不希望精确匹配并且希望近似匹配,则可以使用
LIKE
子句而不是
=

$result = mysql_query("SELECT * FROM torrents WHERE name LIKE '%$search%'")
              or trigger_error(mysql_error());

最后但并非最不重要的一点是,在SQL查询中添加字符串之前,使用
mysql\u real\u escape\u string
函数对字符串进行转义

  • 永远不要使用root作为用户名连接mysql数据库
  • $search应该使用可能的sql注入进行过滤,所以使用mysql\u real\u escape\u字符串来保护自己不受sql注入的影响
  • 第三,在执行查询之前尝试打印查询,以便知道在查询中传递了哪些值。或者使用
    trigger\u error
    函数查看查询中是否存在任何错误
所以你的一行代码可以重写为

 $search = mysql_real_escape_string($search); 
 $result = mysql_query("SELECT * FROM torrents WHERE name LIKE '%$search%'") or trigger_error(mysql_error());
这会让你了解发生了什么

  • 使用
    WHERE名称,如“%$search%”
  • 使用全索引搜索(因为5.6版只适用于MyISAM引擎)来加速搜索查询,而不是像
  • 那样使用
    
    
  • 谷歌的SQLInjection
  • 使用面向对象的驱动程序

  • 尽管单击已经解决了“works无错误”问题,但下面是您的代码,其中有一些改进

    <?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("site"));
    
    if (isset($_GET["text"])) { // you have to use GET method for the search
        $search = mysql_real_escape_string($_GET["text"]); // an essential thing
        $query  = "SELECT * FROM torrents WHERE name LIKE '%$search%'";
        $result = mysql_query($query) or trigger_error(mysql_error()." ".$query);
        while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
            echo $row['name']; 
        }
    }
    

    运行查询时是否有任何结果?可能没有给定条件的行。如果没有错误,有什么问题?表是否已填充?可能您没有行,没有结果。顺便说一下,我知道您只是在学习这一点,但请注意,这看起来很容易受到SQL注入攻击。考虑查看MySqL.RealOracle的字符串和有关使用的相关说明,或者适当的选择。我知道代码容易受到注射;这是我要学习的任务清单。感谢您指出这一点,非常感谢您的建议。没有$\u GET,用户正在检索$\u POST数据。以root身份连接到mysql db!我的脚!您应该始终以权限较低的用户和
    $search=$\u GET[“text”]的身份运行查询是wrong@mlinuxgada但他应该使用GET@JaspreetChahal在我的本地主机上,我总是使用root,我看这里没有问题。@col好的,您认为使用
    root
    没有问题,错误的建议,您理所当然地认为用户可能不会倾向于SQL注入,而类似命令的DROP-on-you mysql不可能实现。谢谢,我做了那些改变,但还是一无所获。没有打印错误或结果。我认为我使用的mysql\u fetch\u数组是错误的。非常感谢您的建议。您可以使用mysql\u fetch\u数组函数。我看没什么问题。您可以做的一件事是使用echo打印查询,然后尝试在mysql会话中直接从命令行或mysql的任何GUI工具执行它,以查看它返回什么。尝试查看$result中是否至少有
    $num\u rows=mysql\u num\u rows($result)的内容;echo$num_行看看这个打印的是什么。谢谢,我得看看MyISAM和PDO。当我最终重写我的搜索时,我将尝试使用它们。谢谢,我做了这些更改,以及Jaspreet Chahal提到的内容。谢谢你的帮助。
    
    <?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("site"));
    
    if (isset($_GET["text"])) { // you have to use GET method for the search
        $search = mysql_real_escape_string($_GET["text"]); // an essential thing
        $query  = "SELECT * FROM torrents WHERE name LIKE '%$search%'";
        $result = mysql_query($query) or trigger_error(mysql_error()." ".$query);
        while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
            echo $row['name']; 
        }
    }