2016-03-14 67 views
1

我有一個函數,查詢MySQL數據庫的東西,即時獲取一個空的數組。我知道搜索查詢是正確的,我不明白爲什麼我的代碼返回一個空數組。另外我運行這段代碼時沒有錯誤。從mysql查詢解析結果

我的代碼如下:

public $results; 

public function __construct() { 
    require_once'app/model/DB_Con.php'; 
$this->db = new connection(); 
$this->db = $this->db->dbConnection(); 
} 

public function _search ($data) { 
    $this->query = $this->db->prepare("SELECT * FROM students WHERE name LIKE '%?%'"); 
    $this->query->bindParam(1, $data); 
    $this->query->execute(); 
    $this->results = $this->query->fetchAll(); 
    print_r($this->results); 
    echo $data; 
} 

有沒有辦法解決PHP PDO,因爲我沒有看到MySQL的錯誤(如果有的話)。

謝謝。

+0

在這裏你去:你的第一個DB包裝的童年deceases(https://phpdelusions.net/pdo/common_mistakes)。你的[1]和[2] –

回答

2

PDO有幾種方法來處理錯誤以及查詢結果。

的錯誤,你可以使用的選項,進入PDO :: __建設,如

new PDO($dsn, $user, $pwd, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 

由你更換$ DSN,$用戶,$ PWD,效果顯着。

有了這樣的構造,每個PDO錯誤都會拋出一個異常,這可能是處理錯誤的最佳方式。

在你的情況下,錯誤可能是你失敗的查詢。如果您使用bind to ... bind參數,則必須確保參數尚未轉義。在這裏,通過在您的查詢中使用like '%?%',PDO將注入變量AND來保護它,並且您的查詢將失敗。 您必須將其更改爲like ?,然後綁定您添加%的參數,例如$this->query->bindParam(1, '%'.$data.'%');

編輯:更多配置選項:http://php.net/manual/fr/pdo.setattribute.php