请使用LIKE运算符帮助在MySQL和PHP之间搜索结果

时间:2014-03-11 06:29:56

标签: php mysql sql-like

我正在尝试在我的网站上创建搜索栏以搜索用户名。在我的数据库上使用mysql时,代码工作正常,但是当我在我的网站上使用它时结果不一样或根本不起作用。不确定是否有设置我不见了。任何帮助都会很棒。

在mysql数据库中,这可行。

SELECT * 
  FROM `users` 
 WHERE username LIKE '%neva%'

这将返回名为Nevada的用户。

在我的网站上,这不起作用。

$friendquery = "neva"

if(isset($_GET['friendquery']){
    $friendquery = preg_replace("/[^0-9a-zA-Z ]/", "", $_GET['friendquery']);
    $sql = "SELECT * FROM users WHERE username LIKE '%$friendquery%'";

    $query = mysqli_query($db_connect, $sql);
    $u = $row["username"];
    echo $u;
}

这不会返回任何内容。是的,我已连接到数据库。

奇怪的是,有些名字有效,有些则没有。就像我说的任何帮助都会很棒。

3 个答案:

答案 0 :(得分:2)

您的php条件存在错误,因此控件根本不会转到SQL

这是错误:

(isset($_GET['friendquery'])

你需要额外的关闭括号=> )

所以condition应该是:

if(isset($_GET['friendquery']))
     /* notice extra closing ^^ braces */

另外

$friendquery = "neva"

if(isset($_GET['friendquery']))

^^如果你没有从url中获取friendquery,这个条件总是会失败的....所以,如果你想在与$friendquery = "neva"的关系中执行它,那么,使用

if($friendquery != "")

最后:

$row = mysqli_fetch_array($query)
您的代码中也缺少

所以最终代码应该是:

if(isset($_GET['friendquery'])){ /* close extra brackets*/
    $friendquery = preg_replace("/[^0-9a-zA-Z ]/", "", $_GET['friendquery']);
    $sql = "SELECT * FROM users WHERE username LIKE '%$friendquery%'";

    $query = mysqli_query($db_connect, $sql);
    $row = mysqli_fetch_array($query) /* fetch array */
    $u = $row["username"];
    echo $u;
}

答案 1 :(得分:0)

我想你错过了$row。试试这段代码

if(isset($_GET['friendquery'])){
    $friendquery = preg_replace("/[^0-9a-zA-Z ]/", "", $_GET['friendquery']);
    $sql = "SELECT * FROM users WHERE username LIKE '%$friendquery%'";

    $query = mysqli_query($db_connect, $sql);
    if(mysqli_num_rows($query) > 0)
    {
       while($row =   mysqli_fetch_array($query))
       {
         $u = $row["username"];
         echo $u;
       }
    }
}

答案 2 :(得分:0)

您的代码有两个问题:

  1. 小错字,主要含义:您在)声明

  2. 中遗漏了一个括号(if
  3. 您的mysqli_query结果需要先获取才能使用。我们使用为每个匹配行运行的循环。

  4. 所以你的PHP将是:

    $friendquery = "neva"
    
    if(isset($_GET['friendquery'])){ // typo: missing a closing parenthesis
        $friendquery = preg_replace("/[^0-9a-zA-Z ]/", "", $_GET['friendquery']);
        $sql = "SELECT * FROM users WHERE username LIKE '%$friendquery%'";
    
        $query = mysqli_query($db_connect, $sql); // run the mysql query
        while($row = mysqli_fetch_array($query)){ // actually get each query results and 
                                                  // put them in $row
        $u = $row["username"]; // use them!
        echo $u;
    }