2015-07-05 5 views
-1

Я хочу сделать небольшой сервис. Основная идея службы - показать одну запись из таблицы mysql, и это делает это за клик в случайном порядке.Функция array_rand иногда возвращает пусто

Вот код, который я написал:

<?php 
require'connection.php'; 

$dbQueryFirst = $nesnePDO->prepare("SELECT CategoryID FROM Categories"); 
$dbQueryFirst->execute(); 
while ($resultsFirst = $dbQueryFirst->fetch(PDO::FETCH_ASSOC)) 
{ 
    $getidFirst[] = $resultsFirst; 
    $puppet = array_rand($getidFirst); 
    if ($puppet == null && empty($puppet)) 
    { 
     shuffle($getidFirst);  
    }  
} 

$rndID = $puppet; 

$dbQuerySecond = $nesnePDO->prepare("SELECT * FROM Categories WHERE CategoryID = :CategoryID"); 
$dbQuerySecond->bindParam(":CategoryID",$rndID); 
$dbQuerySecond->execute(); 
$resultsSecond = $dbQuerySecond->fetchAll(PDO::FETCH_ASSOC); 
echo json_encode($resultsSecond); 
?> 

Первый запрос, получить идентификаторы из БД и принять их в array.Second запрос, получить случайный идентификатор из результата предыдущего запроса и показать всю строку соответствующего идентификатора. И я застрял в случайной функции. Если мне нужно, чтобы объяснить эту работу с процентом для более четко,

  • хорошо работает, и получить результаты% 70
  • получить пустой% 20
  • получить пустой массив []% 10

Я хотел показать скриншоты, но система не давала разрешения из-за моей репутации. Итак, заключительное заявление, как обычно, «Я не очень хорошо разбираюсь в PHP. Любая идея?» Честно говоря, любая помощь будет оценена по достоинству.

+0

* При выборе только одна запись, array_rand() возвращает ключ для случайного входа * – splash58

+0

посмотреть мой ответ Теперь – splash58

ответ

1

Вы должны подождать, пока массив будет заполнен внутри вашего цикла while, а затем получите от него случайное значение.

while ($resultsFirst = $dbQueryFirst->fetch(PDO::FETCH_ASSOC)) 
{ 
    $getidFirst[] = $resultsFirst;  
} 

$puppet = array_rand($getidFirst); 
$rndID = $getidFirst[$puppet]; 

Кроме того, вы можете получить случайную запись непосредственно из своей базы данных без использования php.

$dbQueryFirst = $nesnePDO->prepare("SELECT CategoryID FROM Categories ORDER BY RAND() LIMIT 1"); 
$dbQueryFirst->execute(); 
$rndID = $dbQueryFirst->fetch(PDO::FETCH_ASSOC) 

Кстати, вы должны получить ваш CategoryID как так

$rndID['CategoryID'] 
+0

Блочный код, который вы написали возвращает false.Absolute.The второй совет о SQL запросов, не пробовал Тем не менее, потому что я googled о том, что он работает не так хорошо, как вы можете ожидать. Но я попробую. – 14kubat

+0

Кошка вы пишете результат var_dump ($ rndID)? – JungleZombie

+0

первый блок такой же как @ splash58's. для второй части, echoing '$ rndID ['CategoryID']' не работает. – 14kubat

0

Из док

When picking only one entry, array_rand() returns the key for a random entry 

Во-вторых, $ resultsFirst, я думаю, это массив вам нужно забрать товар от него $resultsFirst['CategoryID']

Итак, используйте

while ($resultsFirst = $dbQueryFirst->fetch(PDO::FETCH_ASSOC)) { 
    $getidFirst[] = $resultsFirst['CategoryID']; 
} 

$puppet = array_rand($getidFirst); 
$rndID = $getidFirst[$puppet]; 
+0

Я пробовал, но иногда все еще возвращает пустое значение. Это просто увеличивает процент, который я объяснил в вопросе :) – 14kubat

+0

, если вы добавите echo $ rndID; после моего кода вы должны каждый раз кататься. Протестируйте пожалуйста, что это так – splash58

+0

жаль, что я написал, но я действительно сделал это в неправильном блоке code.yes, он возвращает, но некоторый id null.why? – 14kubat

Смежные вопросы