Call to a member function execute() on boolean

261
01 июня 2018, 08:20

Есть пхп файл, отобращающий БД в формате JSON. PHP:

<?php 
 //database constants
 define('DB_HOST', '127.0.0.1');
 define('DB_USER', 'binskiy');
 define('DB_PASS', 'binskiy2018');
 define('DB_NAME', 'binskiydb');
 //connecting to database and getting the connection object
 $conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
 //Checking if any error occured while connecting
 if (mysqli_connect_errno()) {
 echo "Failed to connect to MySQL: " . mysqli_connect_error();
 die();
 }
 //creating a query
 $stmt = $conn->prepare ("SELECT accommodation_conditions, address, cancellation_or_prepayment, cards, desc, features, general, imageurl, infrastructure, latitude, link, location, longitude, name, notes, pets, price, services, sport_and_leisure, stars, tourist_taxi, type, with_kids FROM hotels;");
 //executing the query 
 $stmt->execute();
 //binding results to the query 
 $stmt->bind_result($accommodation_conditions, $address, $cancellation_or_prepayment, $cards, $desc, $features, $general, $imageurl, $infrastructure, $latitude, $link, $location, $longitude, $name, $notes, $pets, $price, $services, $sport_and_leisure, $stars, $tourist_tax, $type, $with_kids);
 $hotels = array(); 
 //traversing through all the result 
 while($stmt->fetch()){
 $temp = array();
 $temp['accommodation_conditions'] = $accommodation_conditions;
 $temp['address'] = $address;
 $temp['cancellation_or_prepayment'] = $cancellation_or_prepayment;
 $temp['cards'] = $cards;
 $temp['desc'] = $desc;
 $temp['features'] = $features;
 $temp['general'] = $general;
 $temp['imageurl'] = $imageurl;
 $temp['infrastructure'] = $infrastructure;
 $temp['latitude'] = $latitude;
 $temp['link'] = $link;
 $temp['location'] = $location;
 $temp['longitude'] = $longitude;
 $temp['name'] = $name;
 $temp['notes'] = $notes;
 $temp['pets'] = $pets;
 $temp['price'] = $price;
 $temp['services'] = $services;
 $temp['sport_and_leisure'] = $sport_and_leisure;
 $temp['stars'] = $stars;
 $temp['tourist_tax'] = $tourist_tax;
 $temp['type'] = $type;
 $temp['with_kids'] = $with_kids;
 array_push($hotels, $temp);
 }
 //displaying the result in json format 
 echo json_encode($hotels);

Постоянно при запуске файла выбивает ошибку:

Fatal error: Call to a member function execute() on boolean in C:\xampp\htdocs\omk\binskiy\get_hotels.php on line 22

В этой строке:

$stmt->execute();
Answer 1

$conn->prepare может вернуть FALSE. Нужно проверять, с ошибкой ли отработал prepare или нет.

if($stmt = $conn->prepare ("SELECT accommodation_conditions, address, cancellation_or_prepayment, cards, desc, features, general, imageurl, infrastructure, latitude, link, location, longitude, name, notes, pets, price, services, sport_and_leisure, stars, tourist_taxi, type, with_kids FROM hotels;")) {
    // тут остальной код, если всё ок
}

Конкретно у вас ошибка в том, что запрос оканчивается на ;. Не нужно этого. В доках же всё указано:

Note:

You should not add a terminating semicolon or \g to the statement.

READ ALSO
Telegram, php алгоритм пагинации

Telegram, php алгоритм пагинации

У меня есть такой алгоритм пагинации для inline_keyboard, который строит 2 колонки по 6 элементов, и если элементов больше 12, но меньше 24 (раньше больше...

225
Не работает форма голосования на php

Не работает форма голосования на php

Не могу понять, чего когда голосуешь, не отображается результат?

184
Создать цикл foreach с несколькими элементами

Создать цикл foreach с несколькими элементами

Есть код который выводит значения только одного элемента (wdo_tab_title):

208