将PHP查询转换为PDO,现在没有结果

时间:2014-08-19 04:15:38

标签: pdo

我的查询工作正常,但在将其转换为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″
}

3 个答案:

答案 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>

您需要解决以下问题:

  1. 当您使用$row = fetchAll(PDO::FETCH_ASSOC);时,您会将行提取为$ row [&#39; foobar&#39;](foobar为关键字的数组)而不是$ row-&gt; foobar。后者用于将数据作为对象$row = fetchAll(PDO::FETCH_OBJ);

  2. 获取
  3. 您不会回显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 - 没有逗号。谢谢大家!