【问题标题】:Search MySQL database with LIKE statement使用 LIKE 语句搜索 MySQL 数据库
【发布时间】:2013-04-05 21:02:01
【问题描述】:

我需要返回数据库中用户的搜索结果。

目前,我已经设法在 MySQL 查询中使用 LIKE 函数来返回结果计数,但我需要它来回显所有结果的用户名,而不仅仅是第一个结果:

<?php
    // mysql details
    $host="localhost"; // Host name 
    $username="classified"; // Mysql username 
    $password="classified"; // Mysql password 
    $db_name="jaycraftcommunity"; // Database name 
    $tbl_name="members"; // Table name 

    // Connect to server and select database.
    mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
    mysql_select_db("$db_name")or die("cannot select DB");

    // form variable to local
    $search = $_POST['username'];

    // make query
    //$sql = "SELECT * FROM $tbl_name WHERE (username='$search' OR verified='$search')"; // sql query
    $sql = "SELECT username FROM $tbl_name WHERE username LIKE '%$search%'"; // sql query
    $result = mysql_query($sql); // do query

    // handle query data
    $count = mysql_num_rows($result);
    $row = mysql_fetch_row($result);
    $array = mysql_fetch_array($result);

    echo $count;

    foreach( $row as $arrays ): ?>
    <tr>
        <td><?php echo htmlspecialchars( $arrays ); ?></td>
        <br />
    </tr>
<?php
    endforeach;
?>

HTML 表单如下所示:

<h2>Search</h2>

<form method="post" action="search_engine.php">
    Search for:
    <input type="text" name="username">
    <input type="submit" value="Search for username">
</form>

目前,如果您访问http://dev.jaycraft.co/player/dupe/search.php,您可以看到它的实际效果。搜索单个字母,它显示 echo $count 有多少结果,但只回显第一个结果。

谢谢

【问题讨论】:

  • while($row=mysql_fetch_array()) { //output results here }。此外,您可以广泛直接在查询中使用输入的POST 值进行 SQL 注入。

标签: php html mysql search sql-like


【解决方案1】:

每次调用mysql_fetch_row($result) 都会返回另一行并推进光标。您只需使用 while() 循环遍历结果中的所有行:

while($row = mysql_fetch_row($result)) {
    echo $row[0];
}}

为了方便使用,最好使用mysql_fetch_assoc($result);,它会返回一个关联数组:

while($row = mysql_fetch_assoc($result)) {
    echo $row['username'];
}}

【讨论】:

    【解决方案2】:

    你可以

    <?php
    $sql = mysql_query($sql);
    while($row = mysql_fetch_assoc($sql)){
        echo $row['username'].'<br />';
    }
    ?>
    

    但是请使用mysqli而不是mysql! http://www.php.net/manual/en/book.mysqli.php

    【讨论】:

      【解决方案3】:

      当您使用准备行时,上述解决方案不起作用,因为替换符号与like 符号相同。尝试通过将其预先格式化为字符串来在准备中制作搜索参数。然后只需通过 foreach 或 for 循环遍历可用的行。

         $Table_Name    = $wpdb->prefix.'tablename';
         $SearchField = '%'. $YourVariable . '%';   
         $sql_query     = $wpdb->prepare("SELECT * FROM $Table_Name WHERE ColumnName LIKE %s", $SearchField) ;
       $rows = $wpdb->get_results($sql_query, ARRAY_A);
      if(!empty($rows))
        {
         $TotalRows = $wpdb->num_rows;
         foreach($rows as $row)
           {
           echo $row['field name'];
           }
      

      }

      【讨论】:

        【解决方案4】:

        你需要一个 while 循环遍历你的行:

        while($row = mysql_fetch_array($result){
         foreach( $row as $cell): ?>
            <tr>
                <td><?php echo htmlspecialchars( $cell); ?></td>
                <br />
            </tr>
        <?php
            endforeach;
        ?>
        
        }
        

        mysql_fetch_rowmysql_fetch_array 几乎是唯一的函数,它们都从结果集中获取下一行。您可以使用mysql_fetch_assoc 以数据库列名作为键来获取值。 (推荐)

        【讨论】:

        • 他只检索SELECT 中的一列,不需要您拥有的内部foreach 循环,只需要$row['username']
        猜你喜欢
        • 2011-04-09
        • 1970-01-01
        • 1970-01-01
        • 2012-09-20
        • 1970-01-01
        • 2012-06-03
        • 1970-01-01
        • 1970-01-01
        • 2019-04-30
        相关资源
        最近更新 更多