2013-10-30 49 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 
}