2012-01-17 88 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 where clause

如果我在mysql中運行select * from threads where posted=0;,我看到400-500的結果是正確的。如果需要它的發佈是TINYINT一長度1

+0

不知道你試圖用線'做什麼$ randomids [] = $行[ 'wqpid'];',但'[]'表示你將一個值附加到一個數組上,所以你只要將$ randomids初始化爲一個空字符串就可以轉換成一個數組。然後,使用運算符'。='這是一個字符串連接器。我不知道這是什麼最終結果,但我不認爲這是你想要做的。 – Travesty3 2012-01-17 17:17:57

回答

1

如預期,沒有您的代碼將無法正常工作,因爲array_rand不返回隨機但在陣列中,而不是隨機關鍵,這將是0-400〜取決於結果的數量。

您的代碼應如下所示:

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

這將確保實際的ID被傳遞過來,該陣列中的ID的不索引。

+0

謝謝,這解決了我的問題 – 2012-01-17 17:51:23

1

不是你的問題的直接答案,但你不需要兩個查詢只是選擇一個隨機的行。

如果你想這樣做在一個查詢:

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

謝謝,我會嘗試使用一個查詢 – 2012-01-17 17:52:04