fetch_array с подготовленным оператором? PHP MYSQL?

#php #mysql #mysqli

#php #mysql #mysqli

Вопрос:

По какой-то причине я ни за что на свете не могу заставить это работать, я новичок в подготовленных операторах!

 
    $q = $dbc -> prepare ("SELECT * FROM accounts WHERE email = ? amp;amp; logcount = ''");
    $q -> bind_param ('s', ($_SERVER['QUERY_STRING']));
    $row = $q -> fetch_array(MYSQLI_ASSOC);
    $q -> execute();
    $q -> store_result();
        if ($q -> num_rows == 1) {
            $q = $dbc -> prepare("UPDATE accounts SET logcount = '0' WHERE email = ?");
            $q -> bind_param('s', ($_SERVER['QUERY_STRING']));
            $q -> execute();
            echo '

Congratulations ' . $row['username'] . ' your account is now active!

'; }

Есть идеи, почему $row [‘username’] не будет печататься? Он возвращает :
Вызов неопределенного метода mysqli_stmt::fetch_array()

Спасибо.

Комментарии:

1. us2.php.net/manual/en/mysqli-stmt.prepare.php перейдите к примеру 1. Метода fetch_array() не существует. вам нужно «привязать результат»

Ответ №1:

Вам не нужно fetch_array в этом случае.

Если вы хотите использовать get данные из запроса, вам нужно использовать bind_result и fetch после вызова execute .

Ответ №2:

Вам нужно вызвать $q -> execute(); перед получением результата.

Комментарии:

1. Я сделал это и отредактировал свой вопрос, он выдает ту же ошибку, спасибо.

Ответ №3:

Похоже, вы делаете это неправильно, когда вы вызываете execute, он возвращает результирующий объект, для которого вы вызываете свои методы выборки:

 $q = $dbc->prepare ("SELECT * FROM accounts WHERE email = ? amp;amp; logcount = ''");
$q->bind_param ('s', ($_SERVER['QUERY_STRING']));

//Updated Here
$result = $q -> execute();

if ($result->num_rows == 1)
{
    $assocData = $result->fetch_array(MYSQLI_ASSOC);
    //Do other stuff
}