PDO получение ценностей

Я сделал блог. Все работает правильно, кроме одной вещи; возможность сравнить мои id для того, чтобы открыть соответствующую статью.

я использую FETCH_ASSOC:

$sth->setFetchMode(PDO::FETCH_ASSOC); 

я проверяю $_GET для id:

if (isset($_GET['id']) && ($_GET['id'] == $blogid['id'])) { **PROBLEM IS WITH $blogid
$row = $sth->fetch()
//... Code to display html and db values 

Если это правда, это показывает весь пост в блоге. В противном случае он отображает все вступления блога:

<?php } else { ?>
<?php while($row = $sth->fetch()) {  ?>
//... Code to display html and db values

Как я могу получить доступ к id в моем if заявление? Если я сделаю что-то вроде:

$blogid = $sth->fetch()

это облажается $row = $sth->fetch() переупорядочив посты

РЕДАКТИРОВАТЬ Запрос добавлен:

$sth = $dbh->query('SELECT id, title, slug, body, image, author, date, category from blog ORDER BY date DESC');

1 ответ

Решение

Вы используете PDO и MySQL немного неправильно здесь. Вместо того, чтобы получать все сообщения в блоге и проверять, имеет ли тот, который вы получили, правильный идентификатор, вы должны получить только одну запись (строку) в блоге из БД, используя WHERE оговорка, как это:

SELECT id, title, ... FROM blog 
WHERE id=[ID from $_GET] 
ORDER BY date DESC

PDO прекрасно справляется с этой задачей, позволяя использовать заполнители:

SELECT id, title, ... FROM blog 
WHERE id=:theBlogID 
ORDER BY date DESC

Здесь я использовал заполнитель :theBlogID который будет заменен $_GET параметр.

Используя PDO, ваш окончательный код должен подготовить запрос, привязать к нему параметр, выполнить его и затем получить результат (проверка, есть ли результат на самом деле, используя PDO::rowCount()) что-то вроде этого:

$sth = $dbh->prepare('SELECT id, title, ... FROM blog 
                      WHERE id=:theBlogID 
                      ORDER BY date DESC');

$sth->bindParam(':theBlogID', $_GET['id'], PDO::PARAM_INT);    // Bind the ID from $_GET to the placeholder

$result = $sth->execute();    // Execute (run) the query

if($result->rowCount()) {    // Have we found any blog posts with the ID specified?
    $data = $result->fetchAll();

    foreach($data as $post) {
        // Print out your blog post
    }
}

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

Другие вопросы по тегам