2012-01-17 2 views
1
try { 
    $dbh = new PDO('mysql:host=localhost;dbname=wqposts', 'root', ''); 
    $query = "SELECT wqpid FROM threads WHERE posted ='0'"; 
    $randomids = ''; 
    foreach ($dbh->query($query) AS $row) { 

     $randomids[] .= $row['wqpid']; 

    } 

    } catch (PDOException $exception) { 
    echo "Connection error: " . $exception->getMessage(); 
    } 
    $post = array_rand($randomids, 1); 


    try { 
    $dbh = new PDO('mysql:host=localhost;dbname=wqposts', 'root', ''); 
    $stmt = $dbh->prepare("SELECT * FROM threads WHERE wqpid = :wqpid"); 
    $stmt->bindParam(':wqpid', $post, PDO::PARAM_INT); 
    $stmt->execute(); 

    while ($row = $stmt->fetch()) { 
//output html 
} 

Как-то WHERE опубликовано = '0' в первом утверждении не работает, потому что результаты во втором выражении, где отправлено = 1, отображаются.php mysql где статья

Если я запустил select * from threads where posted=0; в mysql, я вижу 400-500 результатов, которые являются правильными. В случае, если это необходимо Размещенное TinyInt с длиной 1.

+0

Не уверен, что вы пытаетесь сделать с линией '$ randomids [] = $ строки [ 'wqpid'];', но '[]' означает, что вы добавляете значение в массив, поэтому вы просто превратили $ randomids в массив после инициализации его как пустой строки. Затем вы используете оператор '. =', Который является конкатенатором строк. Я не знаю, каков конечный результат, но я не думаю, что это то, что вы пытаетесь сделать. – Travesty3

ответ

1

Ваш код не будет работать, как и ожидалось, нет, потому что array_rand не возвращает случайное значение но вместо случайного ключ в массиве, который будет 0-400 ~ в зависимости от количества результатов.

Ваш код должен выглядеть следующим образом:

$stmt->bindParam(':wqpid', $randomids[$post], PDO::PARAM_INT); 

Это гарантирует, что фактический идентификатор передается через, а не индекс ID в массиве.

+0

Спасибо, что решил мою проблему –

1

Не прямой ответ на ваш вопрос, но вам не нужны два запроса, чтобы выбрать случайную строку.

Если вы хотите сделать это в одном запросе:.

$query = "SELECT * FROM threads WHERE posted=0 ORDER BY rand() LIMIT 1"; 
+0

Спасибо, я попробую использовать один запрос –

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