我的查询工作正常,但在将其转换为PDO后,我得到的结果不是我的结果,而是在表格中列出了所有结果。也许这只是我的foreach循环和变量的一个问题?如果我转储$ row我得到array(0){},但是当我转储$ results时我得到了下面的结果:
//原始(但不安全)的代码:
$results = $wpdb->get_results("SELECT stories.story_name, stories.category, stories.SID,
wp_users.ID, wp_users.display_name FROM stories LEFT JOIN wp_users ON
stories.ID=wp_users.ID where stories.active = 1");
//新的PDO代码不起作用:
$results = $dbh->prepare("select
wp_users.ID,
wp_users.display_name,
stories.SID,
stories.story_name,
stories.category,
FROM stories
LEFT JOIN wp_users ON stories.ID=wp_users.ID
WHERE stories.active=1");
$results->execute();
$row = $results->fetchAll(PDO::FETCH_ASSOC);
echo var_dump($results);
if ($row) {
echo '<table>';
echo '<tr>';
echo '<td><b>Topic</b></td>';
echo '<td><b>Category</b></td>';
echo '<td><b>Last User</b></td>';
echo '</tr>';
foreach ($row as $result) {
echo '<tr>';
echo "<td>site</td>";
echo '<td>$row->category; '</td>';
echo "<td>display_name</a></td>";
}
echo '</table>';
}
?>
//页面上的结果:
object(PDOStatement)#76 (1) {
["queryString"]=>
string(203) “select
wp_users.ID,
wp_users.display_name,
stories.SID,
stories.story_name,
stories.category,
FROM stories
LEFT JOIN wp_users ON stories.ID=wp_users.ID
WHERE stories.active=1″
}
答案 0 :(得分:1)
请删除bindParam
部分。并且只是保留这个部分,因为你没有在准备好的声明中传递任何参数。
$results = $dbh->query("
select wp_users.ID,
wp_users.display_name,
stories.SID,
stories.story_name,
stories.category,
FROM storiesLEFT
JOIN wp_users
ON
stories.ID=wp_users.ID
WHERE
stories.active=1
");
$row = $results->fetchAll(PDO::FETCH_ASSOC);
编辑:你似乎已经搞砸了。这就是你应该如何拥有你的桌子
<table>
<tr>
<th>Topic </th>
<th>Category</th>
<th>Last User</th>
</tr>
<tr>
<?php foreach ($row as data) { ?>
<td><?php echo $data['story_name']; ?></td>
<td><?php echo $data['category']; ?></td>
<td><?php echo $data['display_name']; ?></td>
<?php } ?>
</tr>
</table>
您需要解决以下问题:
当您使用$row = fetchAll(PDO::FETCH_ASSOC);
时,您会将行提取为$ row [&#39; foobar&#39;](foobar为关键字的数组)而不是$ row-&gt; foobar。后者用于将数据作为对象$row = fetchAll(PDO::FETCH_OBJ);
您不会回显HTML。查看这些PHP Best Practices (especially no. 5)。
答案 1 :(得分:0)
尝试添加:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
实例化pdo对象后。如果查询中存在错误,则会抛出异常。
PDO很可能会抑制错误。
答案 2 :(得分:0)
搞定了...这是我的SQL语句中的stories.category之后的逗号导致所有的混乱!只需要它来阅读stories.category FROM stories - 没有逗号。谢谢大家!