Intereting Posts
ИСПОЛЬЗОВАНИЕ $ ЭТОГО в PHP Проверка, а затем перенаправление на почтовый маршрут в Ларавеле Столбец не найден: 1054 Неизвестный столбец, используя соединение Рассчитайте разницу между двумя датами с использованием Carbon and Blade php foreach с многомерным массивом сеанс сеанса уничтожен после обновления Лучший подход для выбора наиболее просматриваемых сообщений за последние n часов htmlentities уничтожает строки utf-8 Doctrine2 – Событие триггера при изменении свойства (PropertyChangeListener) .htaccess 301 перенаправление одной страницы Многократные совпадения Mysql с левым соединением parsing url – php, проверить, существует ли схема, проверить правильность URL-адреса PHP: использование сообщения, когда поля mutliple form имеют одинаковое имя и идентификатор Арабская передача данных между несколькими таблицами в разных базах MySQL, возвращающихся ???????? как новые значения Доступ запрещен для пользователя 'root' @ 'localhost' с помощью PHPMyAdmin

Почему я получаю эту ошибку вызова функции для не-объекта, когда я вызываю функцию на объекте?

Ошибка:

Неустранимая ошибка: вызовите функцию-член bind_param () для не-объекта в /var/www/web55/web/pdftest/events.php в строке 76

Код:

public function countDaysWithoutEvents(){ $sql = "SELECT 7 - COUNT(*) AS NumDaysWithoutEvents FROM (SELECT d.date FROM cali_events e LEFT JOIN cali_dates d ON e.event_id = d.event_id WHERE YEARWEEK(d.date) = YEARWEEK(CURRENT_DATE()) AND c.category_id = ? GROUP BY DAY(d.date) ) AS UniqueDates"; $stmt = $this->link->prepare($sql); $stmt->bind_param('i', $this->locationID); $stmt->execute(); $stmt->bind_result($count); $stmt->close(); return $count; } 

$this->link->prepare($sql) создает подготовленный оператор для MySQLi.

Почему я получаю эту ошибку?

AND c.category_id = ? – в вашем запросе нет псевдонима c.

Кроме того, попробуйте

 $stmt = $this->link->prepare($sql); if (!$stmt) { throw new ErrorException($this->link->error, $this->link->errno); } if (!$stmt->bind_param('i', $this->locationID) || !$stmt->execute()) { throw new ErrorException($stmt->error, $stmt->errno); } 

Я думаю, что проблема явно связана с подготовкой .

Функция, вероятно, не работает, и в этом случае $ stmt будет FALSE и, следовательно, не имеет метода bind_param в качестве члена.

Из руководства php mysqli :
mysqli_prepare () возвращает объект оператора или FALSE, если произошла ошибка.

Проверьте свой запрос! Возможно, проблема с оператором SELECT. А также проверьте FALSE, прежде чем пытаться выполнить любую функцию-член на том, что, по вашему мнению, является объектом, возвращаемым функцией подготовки.

 if($stmt === FALSE) die("Prepare failed... ");// Handle Error Here // Normal flow resumes here $stmt->bind_param("i",""); 

РЕДАКТИРОВАТЬ

Я подозреваю, что заявление может быть ошибочным из-за подзапроса:

 SELECT d.date FROM cali_events e LEFT JOIN cali_dates d ON e.event_id = d.event_id WHERE YEARWEEK(d.date) = YEARWEEK(CURRENT_DATE()) AND c.category_id = ? GROUP BY DAY(d.date) 

Вместо этого, почему бы вам не написать свой запрос следующим образом:

 public function countDaysWithoutEvents() { $count = FALSE; $sql = "SELECT COUNT(d.date) "; $sql .= " FROM cali_events e "; $sql .= " LEFT JOIN cali_dates d ON e.event_id = d.event_id "; $sql .= " WHERE YEARWEEK(d.date) = YEARWEEK(CURRENT_DATE()) "; $sql .= " AND c.category_id = ? "; $sql .= " GROUP BY DAY(d.date) "; $stmt = $this->link->prepare($sql); if($stmt !== FALSE) { $stmt->bind_param('i', $this->locationID); $stmt->execute(); $stmt->bind_result($count); $stmt->fetch(); // I think you need to do a fetch // here to get the result data.. $stmt->close(); }else // Or, provide your own error die("Error preparing Statement"); // handling here return (7 - $count); } 

PS Я думаю, что у вас также был отсутствующий звонок для извлечения (см. Пример выше)

$ this-> link-> подготовить этот оператор не возвращает объект, чтобы он дал вам ошибку