#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!';
}
Ссылки: