2013-05-11 60 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