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
}
}
Неясно, сколько из вышеперечисленного у вас есть в данный момент, поскольку вы предоставляете только один или два фрагмента строки здесь и там, но это должно дать хорошее представление о том, что вам нужно сделать.