0

我有这个代码:

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=搜索)

如果我使用 '%".$inp."%' 而不是 '%$inp%' 它可以工作,但它会显示我数据库中的所有用户。

4

2 回答 2

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 
于 2012-07-19T07:23:44.373 回答
0

我发现如果您这样做,使用 LIKE 搜索效果最好:

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

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

于 2012-07-19T07:16:44.417 回答