2014-04-14 3 views
1

Да ... этот вопрос был опубликован много раз. Вот пример: Fatal error: Call to a member function query()on a non-object. Но я просмотрел многие из этих дублирующих сообщений и не могу найти решениеPHP MySQLi Фатальный вызов функции-члена fetch_array() для не-объекта

Я вытащил этот код (рабочий) с этого сайта (nine-to-five)

Но я пересмотрел свой код (который отличается от SO поста), чтобы включить код, упомянутый в ответах на пост и я все еще получаю ошибку:

// Credentials 
    $dbhost = "localhost"; 
    $dbname = "qmsdb"; 
    $dbuser = "root"; 
    $dbpass = ""; 

    // Connection 
    global $tutorial_db; 

    $tutorial_db = new mysqli(); 
    $tutorial_db->connect($dbhost, $dbuser, $dbpass, $dbname); 
    $tutorial_db->set_charset("utf8"); 

    // Check Connection 
    if ($tutorial_db->connect_errno) { 
    printf("Connect failed: %s\n", $tutorial_db->connect_error); 
    exit(); 
    } 


    // Get Search 
    $search_string = preg_replace("/[^A-Za-z0-9]/", " ", $_POST['query']); 
    $search_string = $tutorial_db->real_escape_string($search_string); 

    // Check Length More Than One Character 
    if (strlen($search_string) >= 1 && $search_string !== ' ') { 

    // Build Query 
    $query = 'SELECT * FROM compressors WHERE MUNPN LIKE "%'.$search_string.'%" OR name LIKE "%'.$search_string.'%"'; 

    // Do Search 
    $result = mysql_query($query); 
    while($results = $result->fetch_array()) { 
    $result_array[] = $results; 
} 

    .... more code that doesn't apply.... 

    } 

ошибка: «Fatal вызов функции-члена fetch_array() на не объект» и точек линии до:

while($results=$results->fetch_array()) { 

Я очень новичок в Php/MySQL - так что любая помощь в этом будет принята с благодарностью.

Спасибо!

.

+1

Вы смешиваете mysql и mysqli_ –

+1

Вы используете MySQLi для подключения ('new mysqli();'), а затем 'mysql_query' для выполнения запроса. Это не сработает. –

+0

^- «... * значение, * change' $ result = mysql_query ($ query); 'to' $ result = mysqli_query ($ query); ' –

ответ

1

mysql_*() функции НЕ, и есть NEVER был, объектно-ориентированный:

$tutorial_db = new mysqli(); 
         ^----note the "i" 


$result = mysql_query($query); 
       ^-- note the LACK of an "i" 
while($results = $result->fetch_array()) { 
       ^^^^^^^^---- not an object, because mysql_*() functions are NOT objects 

Вы не можете использовать DB ручки/объект, созданный в одной библиотеке БД (PDO, Mysqli, MySQL) в любой из других библиотек. Все они могут разговаривать с MySQL под капотом, но их соответствующие дескрипторы/объекты НЕ являются совместимыми.

+0

*« Они могут разговаривать с MySQL под капотом * ... но сегодня они не собираются вместе с ним ». –

+0

Спасибо. Но это все еще не имеет смысла. Как работает исходный код (с девяти-пяти) веб-сайтов, но не так? – bagofmilk

+0

, вероятно, потому, что он либо никогда не делал, либо вы вводили опечатки, когда вы его модифицировали для собственных целей. –

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