2016-05-20 2 views
0

Я продолжаю получать эту ошибку при написании кода, связанного с базой данных. За последний месяц или около того я пытался использовать различные методы, чтобы обойти ошибки, с которыми я сталкиваюсь. Единственный, кого я нашел, был foreach относительно обмена сообщениями.PHP и MySQL Я не вижу эту ошибку?

История вопроса: У меня есть персональный сайт, к которому я в настоящее время пытаюсь включить социальные функции, такие как обмен сообщениями и друзей. В будущем я планирую добавить такие вещи, как фотографии профиля и многое другое.

Ошибка:

[TIME] [:error] [pid PID] [client IP:PORT] PHP Fatal error: Call to a member function bind_param() on a non-object in /www/hub/models/funcs.php on line 1656, referer: http://my.website.com/hub/users.php 

Точки об ошибках в этой строке:

$stmt->bind_param("i", $user); 

доступ к которой осуществляется с помощью этой функции:

function getUnreadMessages($user) 

доступ к которой осуществляется с помощью этого ресурса:

left-nav.php 

доступ к которой осуществляется с помощью каждой страницы на сайте, который пытается запустить эту строку кода:

$unread = getUnreadMessages($loggedInUser->user_id); 

Так что он может запускать эти строки кода:

if($unread > 0){ 
    echo "<li><a href='user_messages.php'>Messages</a>(".$unread.")</li>"; 
}else{ 
    echo "<li><a href='user_messages.php'>Messages</a></li>"; 
} 

Это полная функциональность:

function getUnreadMessages($user){ 
    global $mysqli,$db_table_prefix; 
    $stmt = $mysqli->prepare("SELECT 
     id, 
     from_user, 
     to_user, 
     time_sent, 
     subject, 
     message, 
     deleted 
     FROM ".$db_table_prefix."messages 
     WHERE 
     to_user = ? 
     AND 
     read = 0 
     "); 
    $stmt->bind_param("i", $user); 
    $stmt->execute(); 
    $unread = $stmt->num_rows; 
    $stmt->close(); 
    return($unread); 
} 

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

+0

Каков тип данных столбца 'to_user'? – keziah

+0

Вы установили экземпляр объекта для '$ mysqli'?Подобно '$ mysqli = new mysqli (DB_HOST, DB_USER, DB_PASS, DB_NAME),' – keziah

+0

@thewbmstr http://i.imgur.com/p2z83Xh.png –

ответ

0

PHP Fatal error: Call to a member function bind_param() on a non-object

Означает, что переменная $stmt не является объектом, возможно, NULL значение в соответствии с ошибкой PHP, что он не является объектом, на котором любой метод может быть вызван.

Глядя на вашу функцию getUnreadMessages(), я вижу, что $mysqli является глобальным. Возможно ли, что какая-то другая логика модифицирует $mysqli в другом месте вашей системы?

Вы также видите похожие PHP Fatal Error для «Вызов функции-члена prepare() для не-объекта»? Если бы вы это сделали, это означало бы, что $mysqli будет каким-то образом изменен вне указанной выше логики.

В этот момент он смотрит на меня, хотя этот $stmt не является объектом (var_dump($stmt);, что показывается из интереса?), Потому что $mysqli->prepare(...) не может быть ничего возвращения (или возвращение что-то, но не объект).

Я бы выбрал Google для чего MySQLi prepare()предположил для вывода, если строка SQL действительна и что происходит, когда это не так.

+0

'$ mysqli = new mysqli ($ db_host, $ db_user, $ db_pass, $ db_name);' –

+0

Извините за поздний ответ –

+0

Если вы можете ответить на мои вопросы один за другим, это было бы очень полезно для меня и для всех, кто хочет ответить, а именно: что вы получаете, если вы 'var_dump ($ stmt));'? – theruss

Смежные вопросы