0

我目前有这张桌子。

名称

两个字段,ID 和名称。示例数据为 1 | 哈利。

现在我打算做的是,如果有人在我的表格中输入像亨利这样的东西,它会在我的数据库中搜索以“H”开头的结果然后如果他们有多个结果,它将查看是否有任何结果是“他”,如果不是,它将回退到“H”的先前结果。

我唯一能想到的就是这个

$inputted_name = "Henry";
$query = mysql_query("SELECT `name` FROM `names`");
while($row = mysql_fetch_array($query)){
    $stored_name = $row['name'];
    if($stored_name[0] == $inputted_name[0]){
        if($stored_name[1] == $inputted_name[1]){
            $result = $stored_name;
            break;
        }   else   {
            // continue looking but then return the first result that matched one letter?
        }
    }
}

现在我确信这不是最好的方法。可以在查询中吗?我真的不确定在哪里可以找到一个明智的答案。

4

1 回答 1

0

更改 mysql_query("SELECT nameFROM names");

到 mysql_query("SELECT nameFROM namesWHERE NAME='".$inputted_name."'");

并检查您是否有多个答案。

请注意,如果您的名称来自非受控源(例如网页),这是一种不好的方法,因为它允许 SQL 注入,然后您需要参数,但对于您的示例,它会起作用。

编辑:现在我再次阅读了您的问题,是的,您需要参数或转义,例如:

$name = mysql_real_escape_string($inputted_name);
mysql_query("SELECT `name` FROM `names` WHERE NAME='".$=name."'");

此外,不要尝试在代码中执行数据库可以轻松完成的操作(例如搜索字符)。您的代码几乎总是会比数据库更糟糕,因为它可以进行搜索,将其留给数据库。

于 2012-06-07T09:25:05.627 回答