2 года назад
Call to a member function execute() on bool in
кто нибудь знает как исправить такую ошибку
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
<?php
$mysqli = new mysqli("localhost", "root", "", "jewelry_shop");
if ($mysqli->errno)
{
echo "Error connect to database!";
exit;
};
$query = "SELECT *,img_path,`products`.name AS productsname, `materials`.name AS material FROM `products` INNER JOIN `materials` ON `products`.`id_material`=`materials`.`id` ";
$result = mysqli_query($mysqli,$query) or die(mysqli_error($mysqli));
for ($data = [];
$row = mysqli_fetch_assoc($result);
$data[] = $row);
$result = '';
$arBinds = [];
if(!key_exists('clearFilter', $_GET))
{
if(count($_GET)>0)
{
$query.="WHERE";
if($_GET['material'])
{
$query.=" `products`.`id_material` = :material AND";
$arBinds['material']=htmlspecialchars($_GET['material']);
}
}
}
$stmt=$mysqli->prepare($query);
$itog=$stmt->execute($arBinds);
?>
Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Вы вызываете функцию execute() на boolean-объект (true/false).
12
Возвращаемые значения
mysqli_prepare() возвращает объект запроса или false в случае ошибки.
https://www.php.net/manual/ru/mysqli.prepare.php
Скорее всего ошибка в синтаксисе запроса, который формируется в условиях. Выполните:
1
echo $query;
посмотрите, что у вас вообще в запросе и правилен ли он синтаксически. Если с синтаксисом проблема – смотрите, что не так с условиями, формирующими запрос.
Сугубо личное предположение: если не указан GET-параметр clearFilter, и вместе с тем не указан GET-параметр material, то запрос приобретает вид:
1
SELECT *,img_path,`products`.name AS productsname, `materials`.name AS material FROM `products` INNER JOIN `materials` ON `products`.`id_material`=`materials`.`id` WHERE
То есть оператор WHERE объявляется, но далее ничего нет. Такой запрос будет синтаксически неверным.
Больше по теме