У меня есть следующий код
$sql = "SET @uid := (SELECT ID FROM channels WHERE Used = 0 ORDER BY RAND() LIMIT 1);"; $sql = "UPDATE channels SET Used = 1 WHERE ID = @uid;"; $sql = "SELECT * FROM channels WHERE ID IN = @uid;"; $result = mysqli_multi_query($conn, $sql) or die( mysqli_error($sql) ); if (mysqli_num_rows($result) > 0) { $text = ''; while($row = mysqli_fetch_assoc($result)) { $Channel_Location = $row['Channel_Location']; $text = $text . $Channel_Location; } }
Теперь проблема заключается в том, что php не отображает результат, возвращаемый запросом MYSQL, который хранится в сеансе позже в коде, который будет отображаться на фиктивной странице, и появляется следующая ошибка
Предупреждение: mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result
Мой SQL-запрос делает именно то, что мне нужно, мне просто нужно, поэтому я не хочу его менять. Мне просто нужен совет по поводу того, как я могу заставить PHP повторить @uid, есть ли кто-нибудь, кто поможет мне решить проблему? если так спасибо.
У вас есть 3 запроса в вашем $ sql, поэтому вы должны использовать функцию multi_query http://php.net/manual/en/mysqli.multi-query.php
И вы можете изменить свой первый запрос:
SET @uid = 0; SELECT @uid := ID FROM channels WHERE Used = 0 ORDER BY RAND() LIMIT 1);
Обновление. Вы можете попробовать этот фрагмент кода, модифицированный всеми комментариями.
$sql = 'SET @uid = 0;'; $sql .= 'SELECT @uid:= ID FROM channels WHERE Used = 0 ORDER BY RAND() LIMIT 1);'; $sql .= 'UPDATE channels SET Used = 1 WHERE ID = @uid;'; $sql .= 'SELECT * FROM channels WHERE ID IN = @uid;'; if (mysqli_multi_query($conn, $sql)) { do { $result = mysqli_store_result($conn); } while(mysqli_next_result($conn)); if (mysqli_num_rows($result) > 0) { $text = ''; while($row = mysqli_fetch_assoc($result)) { $Channel_Location = $row['Channel_Location']; $text = $text . $Channel_Location; } } } else { die( mysqli_error($conn) ); }