php - PDOStatement 类的对象无法转换为字符串(帮助)

标签 php mysql pdo

在过去的六个小时里,我一直在努力弄清楚我的代码有什么问题。我的页面不断输出“可捕获的 fatal error :类 PDOStatement 的对象无法转换为字符串。”我不知道为什么!我查看了以前的作业,尝试用谷歌搜索错误类型,但没有任何改变输出。我想按类别 ID 显示我的菜单项。这是我的代码。

class Menu {
    public $conn;
    public function __construct() {
        $db = new Database();
        $this->conn = $db->conn;
    }

    public function __destruct() {
        $this-> conn = null;
    }

    /* Get function */
    public function __get($name) {
        return $this->$name;
    } // End get function

    public function __set($name, $value){
        $this->$name=$value;
    }

    public function menu_items($category_id = 0){
        try {
            $sql = "SELECT item_id, category, category_id, display_order, item_name, item_image, item_description, item_cost FROM menu_items WHERE category_id = $category_id";
          $result = $this->conn->query($sql);

            return $result;
        }
        catch (PDOException $e){
            echo 'Error: ' . $e->getMessage();
            exit();
        }
    }
}

更新:这里是输出所有内容的地方。这段代码会不会有什么问题呢?

include(ABSOLUTE_PATH . 'classes/menu.class.php');

// Create Menu object
$menu = new Menu();
$menu_categories = $menu->menu_categories();

include(ABSOLUTE_PATH . '_includes/header.inc.php');
?>

<hr />

<h2><?=$page?></h2>

<?
while($item = $menu_categories->fetch(PDO::FETCH_OBJ)) {
// Retrieve menu items
$menu_items = $menu->menu_items($menu_categories);
$item_count = $menu_items->rowCount();

if($item_count > 0) {
    echo '<h3>' . $item->category . '</h3>';
?>

    <table id="menu_items" class="listing">
    <?
        // Loop through menu records
        while($item = $menu_items->fetch(PDO::FETCH_OBJ)) {
            echo "\t<tr>\n";
            echo "\t\t" . '<td class="item"><h4>' . $item->item_name .     '</h4><p>' . $item->item_description . '</p></td>' . "\n";
            echo "\t\t" . '<td class="price">$' . $item->item_cost . '</td>'   . "\n";
            echo "\t\t" . '<td class="image"><img src="' . URL_ROOT . '_assets/images/menu/' . $item->item_image . '" alt="' . $item->item_name . '" /></td>' . "\n";
            echo "\t</tr>\n";
        }
    ?>
    </table>

<?
}}
?>

<hr />

<?
include(ABSOLUTE_PATH . '_includes/footer.inc.php');
?>

最佳答案

啊哈

这是你的问题:

while($item = $menu_categories->fetch(PDO::FETCH_OBJ)) {
// Retrieve menu items
$menu_items = $menu->menu_items($menu_categories); //<--Error
$item_count = $menu_items->rowCount();

你应该调用:

$menu_items = $menu->menu_items($item->id);

您正在将 $menu_categories(一个 PDOStatement)传递给 menu_items(),然后尝试在您的查询中直接将其用作字符串。这就是实际发生错误的地方。

可以使此错误更加明显的一个好习惯是键入检查查询参数。所以在 menu_items() 中:

public function menu_items($category_id = 0){

 if(!is_numeric($category_id)) {
    //Do something better here, but just for example
    echo "Error";
    return false;
  }  
  try {
     $sql = "SELECT item_id, category, category_id, display_order, item_name, item_image, item_description, item_cost FROM menu_items WHERE category_id = $category_id";
     $result = $this->conn->query($sql);

     return $result;
   ...

关于php - PDOStatement 类的对象无法转换为字符串(帮助),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34365590/

相关文章:

mysql - Node.JS:使用 alasql 将数据从 mysql 导出到 excel

php - 使用 PDO 转换我的开发后,代码无法正常工作

PHP MYSQL 多词搜索

php - 从填充的 mysql 下拉列表中插入选定的值

php - 检查是否定义了 Laravel Controller Action

php - Codeigniter,安全搜索的最佳实践

javascript - 为演示目的创建站点的副本/ session

php - SQL 查询 onsubmit - 更改现有结果

php - Sqlite3 和 PDO 问题与 ORDER BY

php - 简单 SQL 语句/PHP 函数不起作用的问题