#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");