使用MySQL查询返回正确数据时出现问题

时间:2013-04-23 17:28:46

标签: php mysql

我正在努力弄清楚为什么一个看似正确的mysql查询没有返回正确的结果。我已经收到了几个要查看的文件,我相信这个(下面的代码)是罪魁祸首所在。不幸的是,我没有拥有的所有文件(为朋友工作)所以我很难做任何var_dumps或测试。相反,我创建了自己的模拟搜索脚本,它返回正确的结果 - 尽管查询是相同的。

原:

function build_generic_where_clause ($the_query_string) {
    $where_clauses = Array();
    $the_query_string = $this->db->quote($the_query_string);
    array_push($where_clauses, "accounts.name like '%$the_query_string%'");
    if (is_numeric($the_query_string)) {
        array_push($where_clauses, "accounts.phone_alternate like '%$the_query_string%'");
        array_push($where_clauses, "accounts.phone_fax like '%$the_query_string%'");
        array_push($where_clauses, "accounts.phone_office like '%$the_query_string%'");
    }

    $the_where = "";
    foreach($where_clauses as $clause)
    {
        if(!empty($the_where)) $the_where .= " or ";
        $the_where .= $clause;
    }

    return $the_where;
}

但是这个失败了,因为我会说两个项目,如:

Newstate Inc.
Welders of New York

并且上面的查询只返回Newstate。但是,如果我在搜索框中键入%new,则会返回两个项目。我需要得到它只需输入'new'将返回它们。

我的测试模拟查询:

public static function getAccount($the_query_string){
    $con = drake::connectDB();

    $query = "select * from accounts where name like '%$the_query_string%'";

    $result = $con->query($query);
    while($row = $result->fetch_array()){
        echo($row['name']).'<br />';    
    }
}

在搜索“新”时,该项会成功返回两个项目。我最好的猜测是$ this-&gt; db-&gt; quote($ the_query_string);正在向搜索字符串添加一些东西,它以某种方式改变它,因此它不会完全返回查询的内容。任何帮助将非常感激。

1 个答案:

答案 0 :(得分:0)

我认为你可以使用

$the_query_string = mysql_real_escape_string($the_query_string)

消除任何意外或特殊的特征要逃脱。希望这会对你有所帮助。 请在评论中告诉我状态。