PHP MySQL где пункт - PullRequest
       7

PHP MySQL где пункт

1 голос
/ 17 января 2012
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 posts = '0' в первом утверждении не работает, поскольку в результате появляется второе утверждение, в котором posts = 1.

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

Ответы [ 2 ]

1 голос
/ 17 января 2012

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

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

$query = "SELECT * FROM threads WHERE posted=0 ORDER BY rand() LIMIT 1";
1 голос
/ 17 января 2012

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

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

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

Это обеспечит передачу действительного идентификатора, а не индекса идентификатора в массиве.

...