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 posted=“0”不起作用,因为第二条语句中的结果posted=1正在显示。
如果在mysql中运行select * from threads where posted=0;,我会看到400-500个结果,这是正确的。如果需要的话,它的长度是1。

最佳答案

您的代码将无法按预期工作,不,因为array_rand不返回随机值,而是返回数组中的随机键,根据结果的数量,随机键将为0-400~。
代码如下:

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

这将确保传递的是实际ID,而不是数组中ID的索引。

09-29 23:00