2013-10-30 114 views
0

所以我有我認爲是一個非常簡單的SELECT查詢。查詢本身看起來是這樣的:MySQL在哪裏返回一行

"SELECT id FROM files WHERE name IN ("me_me-about.jpg", "me_me-blog.jpg", "me_me-.jpg") 

我想在這三個文件在我的數據庫中的ID。他們在他們的桌子上。他們有唯一的ID。 (我這樣做,這樣我就可以將ID插入到聯結表中,以便將它們與用戶配置文件關聯起來,以防萬一您想知道。)我從$ filenames數組創建語句,這只是一個簡單的維數組文件名:

$stmt = '('; 
for ($i = 0; $i < sizeof($filenames); $i++) { 
    $stmt .= '"' . $filenames[$i] . '", '; 
} 
$stmt = substr($stmt, 0, -2); 
$stmt .= ')'; 
$query2 = $this->db->prepare("SELECT id FROM files WHERE name IN " . $stmt); 

查詢返回一行,最後一行。從我見過的WHERE ... IN語法的所有內容來看,這不應該是?是我無法看到的東西嗎?

從PMA(ID,姓名,一年[我回來,一旦這工作])的 「文件」

CSV錶轉儲:

"20";"me_me-about.jpg";;"0" 
"21";"me_me-blog.jpg";;"0" 
"22";"me_me-.jpg";;"0" 

的$文件名的print_r:

Array ([0] => me_me-about.jpg [1] => me_me-blog.jpg [2] => me_me-.jpg) 

print_r的原始形式$語句(上面我的代碼):

("me_me-about.jpg", "me_me-blog.jpg", "me_me-.jpg") 

的try-catch來執行。輸出$行至$ _SESSION這樣我就可以print_r的它的相關頁面上:的$ _SESSION

try { 
    $query2->execute(); 
    $rows = $query2->fetch(); 
    $_SESSION['stmt'] = $rows; 
} catch (PDOException $e) { 
    die($e->getMessage()); 
} 

的print_r [ '語句']:

Array ([id] => 22 [0] => 22) 
+0

此外,當您運行** **確切相同的查詢你得到了什麼在phpmyadmin或在MySQL控制檯? –

+1

在PMA中,我得到了所有三行。這是奇怪的事情。 – Jeff

+1

然後,錯誤必須在此處添加此代碼之後。你如何顯示輸出?我敢打賭,錯誤就在那裏 –

回答

0
$stmt = implode("','", $filenames); 
$query = "SELECT id FROM files WHERE name IN ('" . $stmt . "') "; 
$query2 = $this->db->prepare($query); 

此外,請使用print_rvar_dump進行調試。

var_dump($query)print_r($filenames)

+0

如果您打算推薦調試方法,那麼我會認爲XDebug或Zend Debugger會是我做的更好的選擇 – Phil

+0

,這就是我如何知道該語句是按照我所看到的語法完成的,以及我如何知道它只返回一行。此外,內爆在功能上類似(非常感謝),但仍然只返回一行。 – Jeff

+0

@Jeff,PMA有單排嗎?請提供數據(DB和$文件名)。 –

0

你應該遍歷結果按順序設置打印所有值:

while ($query2->fetch()) { 
    // output 
}