使用WHERE子句mysql_query和mysql_fetch_array进行基本搜索

时间:2012-02-18 08:59:30

标签: php mysql search

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

<?php
$con = mysql_connect("localhost", "root", "");
if (!$con) {
    die ("could not connect to db");
}

if (!mysql_select_db("site", $con)) {
    die ("Could not connect to table");
}

$search = $_POST["text"];
$result = mysql_query("SELECT * FROM torrents WHERE name ='$search'"); //or LIKE instead of =

while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
    echo $row['name']; 
}

?>

<?php $con = mysql_connect("localhost", "root", ""); if (!$con) { die ("could not connect to db"); } if (!mysql_select_db("site", $con)) { die ("Could not connect to table"); } $search = $_POST["text"]; $result = mysql_query("SELECT * FROM torrents WHERE name ='$search'"); //or LIKE instead of = while($row = mysql_fetch_array($result, MYSQL_ASSOC)){ echo $row['name']; } ?>

感谢任何帮助。现在代码无错误但没有输出。对所有变化和建议持开放态度。

4 个答案:

答案 0 :(得分:1)

添加mysql_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());

最后但最重要的是在使用mysql_real_escape_string函数转义字符串之前将其附加到SQL查询中。

答案 1 :(得分:1)

开始的三件事

  • 永远不要使用root作为用户名
  • 连接mysql数据库
  • $ search应该使用可能的sql注入进行过滤,所以使用mysql_real_escape_string保护你的自己免受SQL注入
  • 第三,尝试在执行之前打印查询,以便了解查询中传递的值。或使用trigger_error函数查看查询中是否有任何错误

因此可以将一行代码重写为

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

这将让您深入了解发生的事情

答案 2 :(得分:0)

  1. 使用WHERE name LIKE '%$search%'
  2. 使用完整索引搜索(因为5.6仅适用于MyISAM引擎)来加速搜索查询而不是LIKEMySql Manual
  3. Google for SQLInjection。
  4. 使用面向对象的驱动程序,如PDO

答案 3 :(得分:-1)

虽然点击已经确定“无错误”问题,但这里有一些改进的代码。

<?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']; 
    }
}