2016-04-15 2 views
-1

В настоящее время я перехожу с моего сайта из MySQL в MySQLi, и у меня возникла проблема. Я искал часы, но ни один из результатов, которые я нашел, не смог мне помочь. В моем файле connect.php У меня есть следующий код:Вызов неопределенного метода mysqli :: data_seek()

<?php 

connect_db(); 

function connect_db() { 
    $connect_error = 'Sorry, we are experiencing connection issues.'; 
    $mysqli = mysqli_connect('localhost', 'root', '', 'db') or die($connect_error); 

} 

function mysqli_result($res, $row, $field=0) { 
    $res->data_seek($row); 
    $datarow = $res->fetch_array(); 
    return $datarow[$field]; 
} 

?> 

mysqli_result() вызывается, в login.php и register.php.

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

Fatal error: Call to undefined method mysqli::data_seek() in C:\xampp\htdocs\core\database\connect.php on line 10

линия 10 содержит $ res-> data_seek ($ строка);

Вот расширения в моем php.ini файла:

extension=php_bz2.dll 
extension=php_curl.dll 
extension=php_fileinfo.dll 
extension=php_gd2.dll 
extension=php_gettext.dll 
;extension=php_gmp.dll 
;extension=php_intl.dll 
;extension=php_imap.dll 
;extension=php_interbase.dll 
;extension=php_ldap.dll 
extension=php_mbstring.dll 
extension=php_exif.dll 
extension=php_mysql.dll 
extension=php_mysqli.dll 
;extension=php_oci8_12c.dll 
;extension=php_openssl.dll 
;extension=php_pdo_firebird.dll 
extension=php_pdo_mysql.dll 
;extension=php_pdo_oci.dll 
;extension=php_pdo_odbc.dll 
;extension=php_pdo_pgsql.dll 
extension=php_pdo_sqlite.dll 
;extension=php_pgsql.dll 
;extension=php_shmop.dll 

EDIT:

Это где mysqli_result используется:

function user_count() { 
    $mysqli = connect_db(); 
    $query = mysqli_query($mysqli, "SELECT COUNT(`user_id`) FROM `users` WHERE `active` = 1"); 
    return mysqli_result($mysqli, $query, 0); 
} 
+0

Вы проверили, является ли '$ res' допустимым объектом результата Mysqli? как и где вы называете свой mysqli_result()? – Vincent

+1

Что такое '$ res' Я бы предположил, что это не объект MYSQLI_Statement или объект MYSQLI_Result. Покажите нам, как вы создаете' $ res' – RiggsFolly

+0

@Vincent Извините, мне, наверное, следовало запомнить это. Я отредактирую вопрос и добавлю внизу. –

ответ

0

На самом деле этот вопрос может быть связано с тем, что вы не возвращаете значение от connect_db()

Не возвращая переменную $mysqli, ваш объект соединения будет полностью невидим для остальной части вашего скрипта! На самом деле это даже не будет существовать, как только эта функция заканчивает

Так изменить его к этому

function connect_db() { 
    $connect_error = 'Sorry, we are experiencing connection issues.'; 
    $mysqli = mysqli_connect('localhost', 'root', '', 'db') or die($connect_error); 
    return $mysqli; 
} 

Существует гораздо более простой способ сделать это:

function user_count() { 
    $mysqli = connect_db(); 
    $query = mysqli_query($mysqli, "SELECT COUNT(`user_id`) FROM `users` WHERE `active` = 1"); 
    return mysqli_result($mysqli, $query, 0); 
} 

Подобно этому, путем добавления Псевдоним, т. Е. Полезное имя в колонке результатов

function user_count() { 
    $mysqli = connect_db(); // ?? 
    $query = mysqli_query($mysqli, "SELECT COUNT(`user_id`) as num 
            FROM `users` WHERE `active` = 1"); 
    $row = mysqli_fetch_array($query, MYSQLI_ASSOC); 
    return row['num']; 
} 

Его также гораздо лучше идея для подключения к база данных ONCE для каждого скрипта, не один раз для каждого доступа к базе данных, поскольку соединение - довольно трудоемкая операция!

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