搜索查询返回空结果集

时间:2012-07-19 07:10:53

标签: php html mysql

我有这段代码:

PHP:

[CONNECT TO DATABASE OR DIE ( THIS WORKS )]   
if(isset($_GET['search'])) // If it's submitted 
    { 
    $inp = Clean($_GET['inpname']); // Clean my input 
    $sQuery="SELECT name FROM user WHERE (id LIKE '%$inp%')"; // mySql query 
    $r = mysql_query($sQuery) or die(mysql_error()); 
    if(mysql_affected_rows()===0) // If no match found 
        echo "{$inp} is not in our database."; 
    else 
        { 
        echo "<p>{$inp} was successfully searched.</p>"; // Yes, the query worked 
        while($row=mysql_fetch_array($r)) // Loop through the query results 
            echo "{$row[0]}<br>"; // Show the results 
        } // End of the else statement 
    } // End of the if statement 

function Clean($str) // Clean my input 
{ 
    return mysql_real_escape_string(strip_tags(trim($sStr))); // Remove traces of injection 
}

HTML:

<form name="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get"> 
<input name="inpname" type="text"> 
<input type="submit" name="search" value="Search"> 
</form>

我想通过ID在我的数据库中搜索成员但是当我搜索示例1时我没有结果:不在我们的数据库中。 (/index.php?inpname=1&search=Search)

如果我使用'%'。$ inp。“%'而不是'%$ inp%'它可以正常工作,但它向我展示了我数据库中的所有用户。

2 个答案:

答案 0 :(得分:1)

如果你查看php手册说:

int mysql_affected_rows ([ resource $link_identifier = NULL ] )
     

通过与link_identifier关联的最后一次INSERT,UPDATE,REPLACE或DELETE查询获取受影响的行数。

http://php.net/manual/en/function.mysql-affected-rows.php

因此,如果使用SELECT进行查询,则不会返回值。

更改您的代码

if(isset($_GET['search'])) // If it's submitted 
{ 
    $inp = Clean($_GET['inpname']); // Clean my input 
    $sQuery="SELECT name FROM user WHERE id LIKE '%$inp%'"; // mySql query 
    $r = mysql_query($sQuery) or die(mysql_error());

    if (mysql_num_rows($r))
    {
       while ($row=mysql_fetch_array($r))
       {
           echo $row['name']."<br>"; // Show the results 
       }

    }
    else
    {
       echo "{$inp} is not in our database.";  
    }   

} // End of the if statement 

如果你只想要一行

if(isset($_GET['search'])) // If it's submitted 
{ 
    $inp = Clean($_GET['inpname']); // Clean my input 
    $sQuery="SELECT name FROM user WHERE id LIKE '%$inp%' LIMIT 1"; // mySql query 
    $r = mysql_query($sQuery) or die(mysql_error());

    if (mysql_num_rows($r))
    {
       $row=mysql_fetch_array($r)
       echo $row['name']."<br>"; // Show the results 
    }
    else
    {
       echo "{$inp} is not in our database.";  
    }   

} // End of the if statement 

如果您想按照确切的ID进行搜索

if(isset($_GET['search'])) // If it's submitted 
{ 
    $inp = Clean($_GET['inpname']); // Clean my input 
    $sQuery="SELECT name FROM user WHERE id = $inp LIMIT 1"; // mySql query 
    $r = mysql_query($sQuery) or die(mysql_error());

    if (mysql_num_rows($r))
    {
       $row=mysql_fetch_array($r)
       echo $row['name']."<br>"; // Show the results 
    }
    else
    {
       echo "{$inp} is not in our database.";  
    }   

} // End of the if statement 

答案 1 :(得分:0)

我发现,如果你这样做,用LIKE搜索会发挥最佳效果:

id LIKE '%$inp%' OR id LIKE '%$inp' OR id LIKE '$inp%' OR id = '$inp'

因为%表示必须至少有一个符号。因此,%1%找不到1,但会找到417。至少这对我有用:)