2013-11-09 222 views
-1

我遇到來自Yii的奇怪行爲。出於某種原因,如預期該代碼不起作用:CDbCommand返回錯誤結果

$sql = "SELECT id, class_id, lang FROM tbl_top_class WHERE class_name = :string"; 
$cmd = Yii::app()->db->createCommand($sql); 
$data[':string'] = "sad"; 
$result = $cmd->queryAll($data); 
$db = new PDO(...); 
$stmt = $db->prepare($sql); 
$stmt->execute($data); 
$result2 = $stmt->fetchAll(); 
print_r($result); 
echo "<br>"; 
print_r($result2); 

我預計$result$result2是相同的,但事實並非如此。這就是腳本輸出:

Array ([0] => Array ([id] => 1 [class_id] => 0 [lang] => en-us)) 
Array () 

而這裏的數據庫結構&數據:

-- 
-- Table structure for table `tbl_top_class` 
-- 

CREATE TABLE `tbl_top_class` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `lang` varchar(5) NOT NULL, 
    `class_name` varchar(100) NOT NULL, 
    `class_id` bigint(20) unsigned NOT NULL, 
    `description` text, 
    PRIMARY KEY (`id`), 
    KEY `lang` (`lang`), 
    KEY `class_name` (`class_name`), 
    KEY `class_id` (`class_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

-- 
-- Dumping data for table `tbl_top_class` 
-- 

INSERT INTO `tbl_top_class` (`id`, `lang`, `class_name`, `class_id`, `description`) VALUES 
(1, 'en-us', 'discard', 0, 'Non-classifiable'); 

兩個連接是完全相同的數據庫和表,用完全相同的憑據。爲什麼我會得到不同的結果?

+0

沒有人知道發生了什麼? – tinybyte

+0

我遇到同樣的問題。但仍然發現會發生什麼。 – Magic

回答

0

這並不回答原來的問題爲什麼它的工作原理是這樣的,但顯然這種行爲可以通過使用Yii查詢構建器來繞過。按預期構建相同的查詢。

我會將此標記爲正確答案,直到有人可以提供解釋爲止。