php mysql where clause


php mysql where clause

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' 不起作用,因为第二个语句中的结果显示 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 的索引。

不是对问题的直接回答,但您不需要两个查询来选择随机行。

如果要在一个查询中执行此操作:

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