我正在尝试将我的代码从基本的mysql / php切换到PDO,我可以为插入操作,但到目前为止我遇到了一些问题。下面的代码应该在类别中显示用户帖子的类别,但是我没有得到任何结果,当我做var_dump()时,我在底部得到了结果。
$user_ID = get_current_user_id();
$the_SID = ( isset( $_GET['writing'] ) ) ? $_GET['writing'] : false;
$results = $dbh->prepare("select
wp_users.ID,
wp_users.display_name,
stories.ID,
stories.SID,
stories.name,
stories.category,
writing.ID,
writing.text
FROM writing
LEFT JOIN stories on writing.SID = stories.SID
LEFT JOIN wp_users ON writing.ID = wp_users.ID
WHERE (stories.SID = $the_SID) AND (writing.approved = 'Y')
order by position desc limit 1");
$results->bindParam(':wp_users.ID', $user_ID, PDO::PARAM_INT);
$results->bindParam(':display_name', $display_name, PDO::PARAM_STR);
$results->bindParam(':stories.ID', $ID, PDO::PARAM_INT);
$results->bindParam(':name', $story_name, PDO::PARAM_STR);
$results->bindParam(':category', $category, PDO::PARAM_STR);
$results->bindParam(':writing.ID', $ID, PDO::PARAM_STR);
$results->bindParam(':text', $text, PDO::PARAM_STR);
$results->execute();
Category: <?php echo $results[0]->category ?><br />
//also tried without [0] but neither works:
Category: <?php echo $results->category ?><br />
echo var_dump($results);
当我加载页面时,我没有显示类别的结果,var_dump只显示这个,这基本上只是打印sql命令的前半部分,好像我没有用引号或其他东西:< / p>
//结果返回并在WEBPAGE上打印
Category:
object(PDOStatement)#77 (1) {
["queryString"]=>
string(457) “select
wp_users.ID,
wp_users.display_name,
stories.ID,
stories.SID,
stories.name,
stories.category,
writing.ID,
writing.text
FROM writing
LEFT JOIN stories on writing.SID = stories.SID
LEFT JOIN wp_users ON writing.ID = wp_users.ID
WHERE (stories.SID = 18)
order by position desc limit 1″
}
答案 0 :(得分:3)
我只是把它扔给你答案。
您遇到的问题是您没有获取结果。这可以通过以下方式解决( 正如您在评论中所说的那样: - ) )
$row = $results->fetchAll(PDO::FETCH_ASSOC);
这将返回从您的查询中提取的所有行的 array
。
你可以得到这样的元素:
echo $row[0]['category'];
但正如您在评论中所要求的那样,更简单的方法是使用循环。 如果您要打印所有数据:)
foreach($row as $item) {
echo "Category: {$item['category']} <br />";
//.....etc for the rest of the items in the array
}
或者,您可以像许多其他脚本一样使用while
循环来执行此操作:
while($row = $results->fetch()) {
echo "Category: {$item['category']} <br />";
//.....etc for the rest of the items in the array
}
答案 1 :(得分:1)
您没有构建有效的“预备”查询。你有这个,
$results->bindParam(':wp_users.ID', $user_ID, PDO::PARAM_INT);
$results->bindParam(':display_name', $display_name, PDO::PARAM_STR);
$results->bindParam(':stories.ID', $ID, PDO::PARAM_INT);
$results->bindParam(':name', $story_name, PDO::PARAM_STR);
$results->bindParam(':category', $category, PDO::PARAM_STR);
$results->bindParam(':writing.ID', $ID, PDO::PARAM_STR);
$results->bindParam(':text', $text, PDO::PARAM_STR);
但在查询中定义了 none 这些参数。您所做的只是直接将“story id”值替换为查询,这首先打破了使用准备好的查询的整个目的。
这是prepare()
语句的样子:
$results = $dbh->prepare("select
wp_users.ID,
wp_users.display_name,
stories.ID,
stories.SID,
stories.name,
stories.category,
writing.ID,
writing.text
FROM writing
LEFT JOIN stories on writing.SID = stories.SID
LEFT JOIN wp_users ON writing.ID = wp_users.ID
WHERE (stories.SID = :sid) AND (writing.approved = 'Y')
order by position desc limit 1");
你只需要一个bind_param()
:
$results->bindParam(':sid', $ID, PDO::PARAM_INT);