[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Переход на PDO
maax
С трудом заставил себя перейти на PDO и тут же начались баги,есть вот такой код который должен был запрещать страницы с несуществующими идами,но он делает все ровно наоборот на существующий ид он пишет что "Страница удалена либо ещё не создана." а при переходе на любой ид типа /id1123123123 он выдает уже пустую страницу

$result2 = $cnt->prepare("SELECT * FROM users WHERE id=$id");
$result2->execute();
while($myrow2 = $result2->fetch(PDO::FETCH_ASSOC)){
exit ("<meta charset='utf-8'>
<link
rel='stylesheet' href='css/style.css' type='text/css' />
<title>
Ошибка</title>
<div
id='wrap'>
<div
class='horizontalContent'>
<p
class='usererror'>Страница удалена либо ещё не создана.</p>
</div>
</div>
");
AllesKlar
Запрос подготавливают (prepare) тогда, когда в нем есть плейсхолдеры.
После этого плейсхолеры нужно пробиндить.
А уже только после этого пускать на выполнение.

$sth = $cnt->prepare("SELECT * FROM users WHERE id=:id");
if($sth !== false)
{
$sth->bindValue(':id', $id);
$result = $sth->execute();
if($result !== false)
{
while($row = $sth->fetch(PDO::FETCH_ASSOC))
{
var_dump($row);
}
}

else
{
// ошибка в запросе
}
}

else
{
// глюк у PDO
}


_____________
[продано копирайтерам]
Arh
А в чем баг?
Как раньше было?

while работает как if
Если $result2->fetch(PDO::FETCH_ASSOC) что то вернуло, то это true.

$query = $cnt->prepare("SELECT * FROM users WHERE id=$id LIMIT 1");
$query->execute();
$data = $query->fetch();
if(empty($data)) {
echo "Страница удалена либо ещё не создана";
}


И еще, при подключении pdo добавить
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC

что бы постоянно не писать $result2->fetch(PDO::FETCH_ASSOC)
то есть по умолчанию FETCH_ASSOC будет

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
AllesKlar
если плейсхолдеров нет, то просто:
$sth = $cnt->query("SELECT * FROM users WHERE id=$id LIMIT 1");
$data = $sth->fetch();


_____________
[продано копирайтерам]
Arh
AllesKlar
Даже так )
$data = $cnt->query("SELECT * FROM users WHERE id=$id LIMIT 1")->fetch();


Мне интересно как был оформлен запрос без pdo. (maax: "но он делает все ровно наоборот")

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
maax
Arh

Нормально все было, есть ид есть и страница, нету ида то и показывало вот ниже

$result = mysql_query("SELECT * FROM users WHERE id='$id'",$db); 
$myrow = mysql_fetch_array($result);


if (empty($myrow['login'])) { exit("
<meta charset='utf-8'>
<link
rel='stylesheet' href='css/style.css' type='text/css' />
<title>
Ошибка</title>
<div
id='wrap'>
<div
class='horizontalContent'>
<p
class='usererror'>Страница удалена либо ещё не создана.</p>
</div>
</div>

");} //если такого не существует
AllesKlar
maax
твое:
while($myrow2 = $result2->fetch(PDO::FETCH_ASSOC)){
exit ("<meta charset='utf-8'>
<link rel='stylesheet' href='css/style.css' type='text/css' />
<title>Ошибка</title>
<div id='wrap'>
<div class='horizontalContent'>
<p class='usererror'>Страница удалена либо ещё не создана.</p>
</div>
</div>"
);

Читаем по русски:
на первой же итерации цикла, остановить работу скрипта ( exit ) с сообщением "<meta charset='utf-8'> ...."

Как грицца "херню загрузил, херню получил" ;)

_____________
[продано копирайтерам]
maax

AllesKlar

Arh


все спс ,разобрался
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.