2016-09-23 6 views
1

Я использую PHP и MySQL. У меня есть следующий код PHP:MySQL подготовил оператор, генерирующий внутреннюю ошибку сервера

$stmt = $this->db_connect()->prepare(
"SELECT P.`pool_id`, P.`pool_name`, PL.`player_id`, PL.`alias`, PP.`paid` " 
."FROM `pool` AS P, `player_pool` AS PP, `players` AS PL " 
."WHERE P.`sponsor` = ? " 
."AND P.`pool_id` = PP.`pool_id` " 
."AND PP.`player_id` = PL.`player_id` " 
."ORDER BY P.`pool_name`, PL.`alias`;"); 

echo "validated_user_id=".$_SESSION['validated_user_id'].PHP_EOL; 
echo "stmt=".($stmt == null); 
$stmt->bind_param("i", $_SESSION['validated_user_id']); 

Он постоянно возвращает 500 Internal Server Error. Журналы показывают [23-Sep-2016 00:05:06] PHP Неустранимая ошибка: вызовите функцию-член bind_param() для не-объекта. Validated_user_id имеет допустимое значение, но переменная $ stmt имеет значение null.

Сначала я подумал, что использую зарезервированное слово, поэтому я избежал всего - никакого успеха. У меня есть много других запросов к БД, которые выглядят очень похожими, что работа просто прекрасна ...

Что действительно меня сжигает, так это то, что тот же самый код отлично работает в моей локальной рабочей области - эта ошибка появляется только на хосте. Дело в том, что я не знаю, что искать, чтобы выяснить, почему - пожалуйста, помогите.

Обнаружена проблема - было очень небольшое различие в имени одного из столбцов, отсутствовавшего на хосте.

+0

Первое, что нужно сделать, распечатать это заявление, чтобы увидеть, если это в порядке. – e4c5

+0

См. Эту ссылку http://www.w3schools.com/php/php_mysql_prepared_statements.asp –

+0

Посмотрите на версию сервера MySQL как локально, так и на удаленном хосте. – Havelock

ответ

2

Ваш prepare() функция, похоже, возвращается null. Это может произойти из-за ошибки в SQL, но, скорее всего, если она работает на вашей локальной машине, возникает проблема с подключением к базе данных.

Проверьте свою функцию $this->db_connect(), если она сообщит об ошибках подключения. Отделив db_connect() вызов от prepare() вызова может помочь изолировать первопричину:

$connection = $this->db_connect(); 
var_dump($connection); 
$stmt = $connection->prepare(...); 
+0

Пробовал это У меня есть соединение - все еще не получается, когда я пытаюсь создать инструкцию. – BigMac66

+0

Вы упомянули, что SQL может быть ошибкой, что было на самом деле - спасибо. – BigMac66