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 

1行だけが必要な場合

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% は を見つけられません1が、 は見つかります417。少なくともこれは私のために働いたものです:)

于 2012-07-19T07:16:44.417 に答える