可捕获的致命错误:PDOStatement类的对象无法转换为字符串,w

时间:2015-10-01 20:00:21

标签: php mysql pdo

我知道之前已经提出这个问题,但无法找到我此错误的具体实例的答案。

Catchable fatal error: Object of class PDOStatement could not be converted to string

这是我的代码:     

try 
{
    // create connection and set error attributes
    $conn = new PDO("mysql:host=" . HOST . "; dbname=" . DATABASE, USER, PASS);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    //define insert and query variables

    $query = "SELECT * FROM cart WHERE user_id=? AND product_id=?;";

    $insert = "INSERT INTO cart (user_id, product_id, qty, date) 
            VALUES ('$sessId', :i, :q, 'Now()');";

    // execute a query to check if item all ready exist in cart
    $r = $conn->prepare($query);
    $r->execute(array(
        session_id(),
        $i
    ));

    if ($r->rowCount() > 0) {
        echo 'Item already exists in cart';
    } else {
        $q = $conn->prepare($insert);
        $q->bindParam(':i', $i);
        $q->bindParam(':q', $q);

        $q->execute();
        header('Location:../shopping_cart.php');

    }
    $r->closeCursor();


}
catch (PDOException $e)
{
    echo $e->getMessage();
}

我无法发现它有什么问题,否则我只需要知道我需要做什么才能获得要转换的值,或者我应该查看另一种方法。

2 个答案:

答案 0 :(得分:3)

更改变量$q的名称,您无需更改类型。

$q = $conn->prepare($insert);
$q->bindParam(':i', $i);
$q->bindParam(':q', $q); //binding a prepare statement itself?

更改为,并定义$qty,初始值为$q

$q = $conn->prepare($insert);
$q->bindParam(':i', $i);
$q->bindParam(':q', $qty);

答案 1 :(得分:1)

首先,您正在测试是否至少有一条记录使用

session_id()

如果没有,那么你试图插入

$sessId

假设他们以某种方式拥有相同的价值......

我认为你应该插入真实的预备声明,如:

$insert = "INSERT INTO cart (user_id, product_id, qty, date) 
           VALUES (:s, :i, :q, :n);";
         ...
         ...
         ...
 $q = $conn->prepare($insert);
      $q->bindParam(':s', $sessId);
      $q->bindParam(':i', $i);
      $q->bindParam(':q', $qty);
      $q->bindParam(':n', Now());

      $q->execute();
      header('Location:../shopping_cart.php');