Обрезаемая фатальная ошибка: объект класса PDOStatement не может быть преобразован в строку в строке 114

Я пытаюсь добавить некоторые данные в свою базу данных, но я получаю ошибку. Обманутая фатальная ошибка: объект класса PDOStatement не может быть преобразован в строку в /var/www/mandje.php в строке 114. Это код Я использую:

foreach($_SESSION["cart"] as $id => $value){ $query = $db->query('SELECT * FROM Producten WHERE ProductID ="'.$id.'" '); $query->execute(); while($row = $query->fetch(PDO::FETCH_ASSOC)){ $price = $row['Prijs']; $ProductID = $row['ProductID']; } $sql="INSERT INTO Bestellingsdetail( Bestelnummer, ProductID, Aantal, Prijs) VALUES ($max,$ProductID,$value,$price)"; //<---- line 114 $count = $db->execute($sql); 

Я действительно не понимаю, что здесь не так. Любая помощь приветствуется 🙂

В комментариях вы увидите следующее:

 $query = $db->query('SELECT MAX( Bestelnummer ) FROM Bestellingsdetail'); $query->execute(); $max = $query; $max++; 

Это не то, как вы получаете результат запроса. Вы устанавливаете $max для объекта PDOStatement . Вам нужно fetch() результат, чтобы использовать его.

 // I've added "AS maxval" to make it easier to get the row $query = $db->query('SELECT MAX(Bestelnummer) AS maxval FROM Bestellingsdetail'); $max_row = $query->fetch(PDO::FETCH_ASSOC); $max = $max_row['maxval']; $max++; 

Документы: http://www.php.net/pdo.query

PS $query->execute(); требуется только для подготовленных заявлений. query() выполнит запрос немедленно.

 foreach($_SESSION["cart"] as $id => $value) { $query = $db->query('SELECT * FROM Producten WHERE ProductID ="'.$id.'" '); $query->execute(); while($row = $query->fetch(PDO::FETCH_ASSOC)) { $price = $row['Prijs']; $ProductID = $row['ProductID']; } $array = array( $max, $ProductID, $value, $price ); $sql->prepare (" INSERT INTO Bestellingsdetail (Bestelnummer, ProductID, Aantal, Prijs) VALUES (?, ?, ?, ?) ") $sql->execute($array); } 

Пытаться:

 foreach($_SESSION["cart"] as $id => $value){ $query = $db->query('SELECT * FROM `Producten` WHERE ProductID ="'.$id.'" '); $query->execute(); while($row = $query->fetch(PDO::FETCH_ASSOC)){ $price = $row['Prijs']; $ProductID = $row['ProductID']; } $sql="INSERT INTO `Bestellingsdetail`( `Bestelnummer`, `ProductID`, `Aantal`, `Prij`s) VALUES ($max,$ProductID,$value,$price)"; $smtp = $db->prepare($sql); $count = $smtp->execute(); 

Однако попробуйте использовать подготовленные заявления, поскольку вы побеждаете причину использования PDO и можете быть в опасности инъекции:

 foreach($_SESSION["cart"] as $id => $value){ $query = $db->query('SELECT * FROM `Producten` WHERE ProductID ="'.$id.'" '); $query->execute(); while($row = $query->fetch(PDO::FETCH_ASSOC)){ $price = $row['Prijs']; $ProductID = $row['ProductID']; } $sql="INSERT INTO `Bestellingsdetail`( `Bestelnummer`, `ProductID`, `Aantal`, `Prijs`) VALUES (:max,:ProductID,:value,:price)"; $stmt = $db->prepare($sql); $stmt->bindParam(':max', $max); $stmt->bindParam(':ProductID', $ProductID); $stmt->bindParam(':value', $value); $stmt->bindParam(':price', $price); $count = $smtp->execute();