2014-10-28 86 views
1

我有一個很奇怪的問題,我找不出解決方案。 ($ DB ID PDO對象)MySQL PDO查詢的怪異行爲

$type = 'some_type';  
$sql = "SELECT * FROM `last_save` WHERE `type` = :type;"; 
$st = $DB->prepare($sql);  
$st->bindParam(':type', $type, PDO::PARAM_STR); 
$st->execute(); 
$rows = $st->fetchAll(); 
var_dump($rows); 

$行是空數組

array(0) { } 

雖然有數據庫中的行該查詢應該獲取。

我的表結構是這樣的:

CREATE TABLE IF NOT EXISTS `last_save` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `type` text, 
    `parameter` int(11) DEFAULT NULL, 
    `value` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

我真的運行的想法在這裏,任何幫助,將不勝感激。

+1

這是非常瘋狂的是做一個'WHERE'上'TEXT'列,尤其是一個不索引。不應該像'VARCHAR'那樣簡單嗎? – tadman 2014-10-28 19:53:44

+0

注意:你不需要用'''在pdo查詢中終止你的行 – Sebas 2014-10-28 19:55:02

+0

刪除最後一個分號! – 2014-10-28 19:55:32

回答

-1

沒有進一步的測試,我認爲你不必把你的選擇語句中的引號和分號。 試一試像這樣:

SELECT * FROM last_save WHERE type = :type 
+0

不好,沒有幫助。試了幾次,在不同的變化。 – 2014-10-28 20:12:51

+0

您是否也從表名中刪除了引號? – 2014-10-28 20:13:40

+0

當然可以。 – 2014-10-28 20:16:15

1

你的代碼出現清潔,檢查您的PDO連接PARAMS。如果你的存儲在表中的特殊字符,添加了「集名稱UTF8」到你的配置,如:

$DB = new PDO('mysql:host=localhost;dbname=my_db', 'user', 'pass', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));