2013-05-11 85 views
0

我有这条从客户表返回行的sql语句。用户可以选择搜索他们想要输入的内容。我有这个工作,直到我试图通过使用bindValue防止sql注入。现在,除非用户将文本框留空,否则无法返回任何结果。以下是我的代码。仅在空时获取结果

型号

function searchMyCusts($field, $query){   
    $data = null; 
    $msg = null; 
    $status = null; 

    $sth = $this->db->prepare("SELECT ".CustomerFields::ID.",".CustomerFields::FirstName.",".CustomerFields::LastName.",".CustomerFields::PhoneNumber." FROM ".CustomerFields::TableName." WHERE '$field' LIKE :query"); 

    $sth->bindValue(':query', $query); 

    if ($sth->execute()){ 
     $status = "success"; 
     $msg = "Customer entry successfully altered";    
     $data = $this->smartFetchAll($sth); 


    }else{ 
     $status = "error";    
     $msg = "An error occurred. :".$sth->errorInfo()[2]; 
    } 

    $jsonData = json_encode($this->buildResponseArray($status, $msg, $data));   
    return $jsonData; 
} 

。在我在传递的价值到底准备行。就像我说这是工作,直到我试图bindValue查询变量。

我将不胜感激您的任何见解。提前致谢!

问候

+1

请添加对您所使用的语言(PHP等) – 2013-05-11 20:34:59

+0

你能不能再发表'回声$ query'相应的标记你准备好了吗? – peterm 2013-05-11 21:05:16

回答

1

我不知道怎么会工作之前,但首先你需要改变

" WHERE '$field' LIKE :query" 

" WHERE $field LIKE :query" 

" WHERE `$field` LIKE :query" 

的你不能在colu周围使用引号mn名称,因为它只是一个字符串,与:query模式进行比较。该查询将正常工作,但您不会返回任何行。无论是什么也不回来。

其次$query在准备之前应该包含所有必要的通配符。例如。

$query = "%new%"; 

目前尚不清楚它是否是从您的代码的情况下

+0

谢谢peterm事实证明,这是我的问题。它总是一点东西,从来没有吸引你的眼球。非常感谢! – Tama198 2013-05-11 21:41:07