我知道之前已经提出这个问题,但无法找到我此错误的具体实例的答案。
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();
}
我无法发现它有什么问题,否则我只需要知道我需要做什么才能获得要转换的值,或者我应该查看另一种方法。
答案 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');