С использованием mysql_fetch_array(); для подготовленных инструкций

#php #mysql

#php #mysql

Вопрос:

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

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

'; }

Почему при использовании $q[‘username’] не извлекается строка username?

Я новичок в использовании подготовленных инструкций, пожалуйста, простите меня: D!

Спасибо.

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

1. Вы ничего не выбираете. Откуда вы ожидаете получить имя пользователя? Кроме того, я не вижу в вашем коде инструмент «выборка массива»?

2. Хммм, я все еще новичок в этом, приношу извинения.

Ответ №1:

  if ($q -> num_rows == 1) {
        $q = $dbc -> prepare("UPDATE ...");
  

Вы перезаписываете свою $q переменную, которая предположительно содержала результат SELECT (угадывания).

Используйте другую переменную для UPDATE части.

Ответ №2:

Вы выполняете UPDATE инструкцию. Для извлечения данных вы должны использовать SELECT инструкции. UPDATE инструкции возвращают только true или false; также функция mysql fetch_array() должна выдавать ошибку, если вы пытаетесь извлечь non result .

Поскольку ваш код начинается с if ($q -> num_rows == 1) { , я думаю, что это $q -> fetch_array(MYSQLI_ASSOC); относится к предыдущему запросу. Чтобы разделить и не перезаписывать два запроса, вы должны выполнить этот код вместо:

 if ($q -> num_rows == 1) {
    $q2 = $dbc -> prepare("UPDATE accounts SET logcount = '0' WHERE email = ?");
    $q2 -> bind_param('s', ($_SERVER['QUERY_STRING']));
        $q -> fetch_array(MYSQLI_ASSOC);
    $q2 -> execute();
    echo 'Congratulations ' . $q['username'] . ' your account is now active!';
}
  

Ссылки: