Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 类PDO语句的对象无法转换为字符串(帮助)_Php_Mysql_Pdo - Fatal编程技术网

Php 类PDO语句的对象无法转换为字符串(帮助)

Php 类PDO语句的对象无法转换为字符串(帮助),php,mysql,pdo,Php,Mysql,Pdo,在过去的六个小时里,我一直在努力找出我的代码出了什么问题。我的页面不断输出“可捕获致命错误:类PDO语句的对象无法转换为字符串。”我不知道为什么!我查看了以前的作业,尝试用谷歌搜索错误类型,结果没有任何改变。我想按类别id显示我的菜单项。这是我的代码 class Menu { public $conn; public function __construct() { $db = new Database(); $this->conn = $d

在过去的六个小时里,我一直在努力找出我的代码出了什么问题。我的页面不断输出“可捕获致命错误:类PDO语句的对象无法转换为字符串。”我不知道为什么!我查看了以前的作业,尝试用谷歌搜索错误类型,结果没有任何改变。我想按类别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');
?>
include(绝对路径'classes/menu.class.php');
//创建菜单对象
$menu=新菜单();
$menu_categories=$menu->menu_categories();
include(绝对路径。“\u includes/header.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\u categories
(PDO语句)传递到
菜单项()
,然后尝试在查询中直接将其用作字符串。这就是错误实际发生的地方

一个很好的做法是键入check查询参数,这会使这个错误更加明显。因此,在
菜单项()
中:


您确定此代码中发生了错误吗?我看不到您试图将PDO语句(
$result
变量)用作字符串的任何地方。现在您正在更改代码。您对
菜单::菜单项()
的返回值做了什么?很抱歉,我是这个网站的新手,不习惯编辑。我更改了代码,因为我认为我不需要额外的记录语句。这让我更加困惑。我相信返回值应该用作我的菜单索引页的参数。
menu\u categories()
返回什么?错误是您试图将某个对象(PDOStatement对象)视为某个字符串。您是否有文件名或行号可供参考?好的,您是否可以更新您的问题,以包括您正在使用的代码
Menu::Menu items()
,以及
Menu::Menu categories()
?现在,当我运行代码时,它会显示“类stdClass的对象无法转换为字符串”它指的是与前面相同的行:(因此,
$item
不是我想象的那样。它实际上是从获取中返回的stdclass对象。因此,您可能需要执行
$item->id
来获取实际id。您可以使用
打印($item)
检查它是否
id
不是实际的属性名。你也应该使用一个准备好的语句而不是动态查询。除此之外,它可能会使这个bug更容易跟踪。在识别项目->id后,我让它工作了!我很高兴我哭了。谢谢你(所有人)的帮助!
$menu_items = $menu->menu_items($item->id);
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;
   ...