Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите с PDO

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: PDO
Хенаро
Отправлено: 04 Апреля, 2015 - 23:30:41
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Нояб. 2014  


Помог: 0 раз(а)




Здравствуйте, друзья. Недавно познакомился с PDO, отличная вещь, только непонятно с обезвреживанием данных и с подготовленными операторами
Вот например не работает такой вот запросик
PHP:
скопировать код в буфер обмена
  1. if($_GET['search']){
  2.                        
  3.                         $query = "select * from `statti`   WHERE  `title` like '%:search%' or `discription` like '%:search%'";
  4.                         $stmt=$this->db->prepare($query);
  5.                         $search=htmlspecialchars($_GET['search']);
  6.                         $stmt->execute(array(':search'=>$search));
  7.                         while ($row=$stmt->fetch(PDO::FETCH_ASSOC)){
  8.                 printf("
  9.                         <div class='table' style='width:1024px; margin: auto;'>
  10.                         <a href='?option=view&id_text=%s'><h1 class='h2'>%s<img alt='png' src='%s'/></h1></a>
  11.                         </div>
  12.                         ",$row['id'], $row['title'], $row['category']);
  13.                 }
  14.                 }

И через
PHP:
скопировать код в буфер обмена
  1. $search=$this->db->quote(htmlspecialchars($_GET['search']));

Не получается обезвреживать, не срабатывает..
Подскажите как правильно??
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Апреля, 2015 - 23:35:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Именованные плейсхолдеры не должны повторяться, это значит и в массив одно значение дважды под разными ключами надо передать.
 
 Top
Мелкий Супермодератор
Отправлено: 04 Апреля, 2015 - 23:49:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DeepVarvar пишет:
Именованные плейсхолдеры не должны повторяться

Ещё как могут. За что я их и обожаю. Ещё бы нативную возможность передавать пачку параметров в in (?)...

Плейсхолдер PDO - это всё выражение, включая непосредственно кавычки. И знак % для like надо передавать на уровне данных, а не запроса:
PHP:
скопировать код в буфер обмена
  1. $query = "select * from `statti`   WHERE  `title` like :search or `discription` like :search";
  2.                         $stmt=$this->db->prepare($query);
  3.                         $search=htmlspecialchars($_GET['search']);
  4.                         $stmt->execute(array(':search'=>'%'.$search.'%'));


-----
PostgreSQL DBA
 
 Top
teddy
Отправлено: 05 Апреля, 2015 - 00:07:04
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Мелкий пишет:
Ещё как могут

Только в том случае, если ATTR_EMULATE_PREPARES установлен в true.
 
 Top
DeepVarvar Супермодератор
Отправлено: 05 Апреля, 2015 - 00:20:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




teddy пишет:
если ATTR_EMULATE_PREPARES установлен в true
Ухх )) Да там вообще все сложно, если говорить о конкретно используемом драйвере, даже в контексте только мускуля. Вобщем я как всегда - просто не юзаю скользкое место, а в голове отложилось что повторять плейсхолдеры низя.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB