Top.Mail.Ru
Ответы

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 объявляется, но далее ничего нет. Такой запрос будет синтаксически неверным.