Неустранимая ошибка: необработанная ошибка: неподдерживаемые типы операндов в функции updateMax - PullRequest
0 голосов
/ 19 апреля 2020

Я работаю над сайтом электронной коммерции и столкнулся с проблемой, пытаясь ее улучшить. В настоящее время я генерирую свой идентификатор корзины, используя случайное число. Я хочу иметь возможность генерировать идентификатор корзины, получая максимальное число, а затем увеличивая его на 1. Однако я устал делать эту работу, но продолжаю получать следующую ошибку:

Fatal error: Uncaught Error: Unsupported operand types in 
C:\xampp\htdocs\finalProject\phpfunctions\functions.php:318 Stack trace: #0 
C:\xampp\htdocs\finalProject\index.php(41): updateMax(Array) #1 {main} thrown in 
C:\xampp\htdocs\finalProject\phpfunctions\functions.php on line 318

Это строка выдача ошибки:

$newmax = $max + 1;

Вот остаток кода:

function getMaxCartID($db){
$query = "select MAX(cart_ID) from cart";
$statement = $db->prepare($query);
$statement->execute();
$max = $statement->fetchAll(PDO::FETCH_ASSOC);
$statement->closeCursor();
return $max;

}

 function updateMax($max){
 $newmax = $max + 1;
 return $newmax;
 }


 $max = getMaxCartID($db);
$cartID = updateMax($max);
$username = "Twili";
$itemid = $_POST['id'];
$quanity = $_POST['q2'];
$name= $_POST['name'];
$price= $_POST['price'];
addToCart($db, $cartID, $username, $itemid, $quanity, $name, $price);

Спасибо за любую помощь, также я знаю, что функция getMaxCartID работает.

1 Ответ

1 голос
/ 19 апреля 2020

Обычно вы начинаете с проверки, что такое $max, очевидно, это не число! (Вы можете использовать var_dump для печати его содержимого.)

Однако я уже вижу проблему:

Глядя на эту строку ...

$max = $statement->fetchAll(PDO::FETCH_ASSOC);

... мы видим, что это массив, а не одно значение! Я бы предположил, что $max равен [ [ "MAX(cart_ID)" => 123 ] ] в данный момент вместо 123, потому что fetchAll выбирает все строки, а не только одну (поэтому вы получаете [ theRow ] вместо theRow), а PDO::FETCH_ASSOC говорит вы хотите, чтобы каждая строка была ассоциативным массивом, поэтому theRow равно [ "MAX(cart_ID)" => 123 ] вместо 123.

Полагаю, вы хотите вместо этого:

$max = $statement->fetchColumn();
...