Задать вопрос
@davc

Не работает mysqli_stmt_get_result после mysqli_stmt_num_rows?

Всем привет! есть такой PHP код
$game_win_query = mysqli_prepare($link, "SELECT * FROM `game_win` WHERE `id_user` = ?");
        mysqli_stmt_bind_param($game_win_query, "s", $user_get);
        mysqli_stmt_execute($game_win_query);
        mysqli_stmt_store_result($game_win_query);
        $win_num = mysqli_stmt_num_rows($game_win_query);
        $win_fetch = mysqli_fetch_all(mysqli_stmt_get_result($game_win_query));


Если mysqli_fetch_all поставить перед mysqli_stmt_store_result($game_win_query) то mysqli_stmt_num_rows не работает,
а если все остается так как есть ($win_fetch = mysqli_fetch_all) не работает

Как правильно это все реализовать чтобы все работал?
  • Вопрос задан
  • 57 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
Доброго утра.

С подготовленными выражениями не всё так просто, если использовать mysqli* (процедурный или объектный стиль).
В вашем случае придётся разобрать, что именно написано:
$q = "SELECT name, last_name, email FROM users WHERE id IN (?, ?)";

$stmt = mysqli_prepare($link, $q);
if (false === $stmt) {
    die('statement was executed with errors');
}

$id = 1;
$anotherId = 2;

//обратите внимание на строку типов - "ii",
// подозреваю, что у вас ошибочно описан строковый тип "s" для id_user 
$stmt->bind_param("ii", $id, $anotherId); 
$stmt->execute();

$stmt->store_result(); // буферизация
echo "<br>Rows: " . $stmt->num_rows . "<br>"; // количество строк в результате

// При работе с подготовленными выражениями и результатами нам нужно точно знать, что мы получаем в запросе (см. SELECT <fields>)
// Можно получать в запросе все атрибуты, а конкретные имена атрибутов забирать через metadata
$name = null;
$lastName = null;
$email = null;

// Привязка переменных к результирующему набору (порядок, как в SELECT)
 $stmt->bind_result($name, $lastName, $email);

// каждый вызов fetch будет связывать наши переменные и дынными из результата
while ($stmt->fetch()) {
    var_dump([
        'name' => $name,
        'last_name' => $lastName,
        'email' => $email,
    ]);
}

$stmt->free_result(); // освобождаем память
$stmt->close();
$link->close();


Ссылки: Статья на хабре, Stackoverflow

P.S. Не вполне понятно, почему написано именно так (через mysqli*, зачем нужен store_result).
Думаю, что сам код можно упростить если воспользоваться тем же PDO или более высокоуровневым инструментом.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽