Пустая страница после получения случайного числа, которое использовалось в запросе select

#php #select #random #row

#php #выберите #Случайный #строка

Вопрос:

Моя проблема заключается в следующем: я нашел простой и быстрый способ получить случайную строку в моей таблице. Во-первых, я использую query, который подсчитывает мои идентификаторы из моей таблицы. Во-вторых, я генерирую случайное число из 1 в результат запроса count. В-третьих, я выбираю строку из моей таблицы, где id равен моему случайно сгенерированному числу. Все работает нормально, но проблема в том, что иногда запрос отображает мне пустую страницу без указания информации, без указания ошибки.

вот мой код:

 $viso = $stmt = $db->query("select count(id) from intropage")->fetchColumn();
$min=1;
$max= $viso;
$lopas=rand($min,$max);

$stmt = $db->query('SELECT * FROM intropage WHERE id='.$lopas.'');
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
... }
  

Как я могу исправить эту проблему с «пустой страницей»?
Спасибо всем вам за любые ответы!

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

1. Просто чтобы уточнить, это иногда работает? Каков результат, когда это работает?

Ответ №1:

Это не быстрый метод, потому что вы используете двойной запрос к БД И подвергаетесь SQL-инъекции. Попробуйте:

 $query = $db->prepare('SELECT * FROM intropage ORDER BY RAND() LIMI 1');
$query->execute();
$results = $query->fetchAll(PDO::FETCH_ASSOC);

foreach ($results as $row) {
    /* */
}
  

Я думаю, что это также исправит вашу blank page ошибку. Если нет, включите отчет об ошибках и сообщите нам, какую ошибку вы получаете.

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

1. ну, я знал этот метод, и я использовал его, но я хотел протестировать тот метод, который я опубликовал. Ну, блин.. оба этих ответа хороши, но я думаю, что rand () работает не быстро, когда в таблице более 500 тыс. строк.. Спасибо 🙂

Ответ №2:

Активирован ли error_reporting? Ваш запрос неверен, поэтому выдается ошибка throw, и вы, вероятно, не можете ее увидеть

 $db->query("SELECT * FROM intropage WHERE id='".$lopas."'");
  

Кроме того, лучший способ получить случайную строку — использовать RAND()

 $db->query("SELECT * FROM intropage ORDER BY RAND() LIMIT 1");