有人能告诉我这个MySQL查询有什么问题吗?

时间:2011-04-14 03:47:41

标签: php mysql sql

我正在使用的此查询返回此表中的所有数据。我想搜索一个确切的身份证号码并让它仅返回结果。另外,我如何在这里实现mysql_real_escape_string()?

谢谢!

$term = $_POST['term'];

$sql = mysql_query("select * FROM patient WHERE id_number LIKE '%$term%'");

while ($row = mysql_fetch_array($sql)){

    echo 'ID: '                 .$row['id'];
    echo '<br/> First Name: '   .$row['first_name'];
    echo '<br/> Last Name: '    .$row['last_name'];
    echo '<br/> Business Name: '    .$row['business_name'];
    echo '<br/> ID Number: '    .$row['id_number'];
    echo '<br/><br/>';
} 
?>

3 个答案:

答案 0 :(得分:3)

使用:

$query = sprintf("SELECT p.*
                    FROM PATIENT p
                   WHERE p.id_number = '%s'",
                  mysql_real_escape_string($_POST['term']));

$result = mysql_query($query)

while($row = mysql_fetch_array($sql)) { ...

参考:

答案 1 :(得分:2)

如果您只查找一行,那么您真的不应该使用LIKE,而是使用=,例如:

$sql = mysql_query( sprintf("select * FROM patient WHERE id_number='%s'", mysql_real_escape_string( $_POST['term'] ) ) );

如果符合以下条件,则上述内容应仅返回一行:1)id_number unique中的patient,{2} $term实际上对应id_number的值}。

希望这也回答了关于如何使用mysql_real_escape_string()的问题!

答案 2 :(得分:2)

您可以对用户输入使用mysql_real_escape_string(),在这种情况下为$_POST['term']

如果您想要完全匹配,则不应使用LIKE

$term = mysql_real_escape_string($_POST['term']);

$sql = mysql_query("select * FROM patient WHERE id_number = '$term'");