0

所以我得到了我认为非常简单的 SELECT 查询。查询本身如下所示:

"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 的“文件”的 CSV 表转储(id、名称、年份 [一旦工作正常,我会回到那个位置]):

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

$filenames 的 print_r:

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

原始形式的 $stmt 的 print_r(上面有我的代码):

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

Try-catch 执行。将 $rows 输出到 $_SESSION 以便我可以在相关页面上打印它:

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

$_SESSION['stmt'] 的 print_r:

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

2 回答 2

0

您应该遍历结果集以打印所有值:

while ($query2->fetch()) {
    // output
}
于 2013-10-30T04:21:59.433 回答
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)

于 2013-10-30T03:46:23.403 回答