Думаю тема будет многим интересна, что нам дает PDO?
1) Очень быстрый класс для работы с БД
2) Более лучшая защита при запросах к БД
3) Универсальность, в любой момент можно перескочить на скажем PostgreeSQL и при этом вам не придется лопатить весь сайт переделывая запросы к БД.
---------------
Для удобства выдергиваем уже готовый класс из движка RotoCMS, дабы не мучиться в дальнейшем с определениями использовать ?id или :id
1) Обращение к PDO:
обращение к классу PDO происходит непосредственно через DB::run()
2) MYSQL_QUERY:
запрос вида mysql_query будет бить ошибку, и ничего работать не будет, для этого используем
<?php
$a = DB::run()->query("SELECT `name` FROM `user` WHERE `id`=? LIMIT 1",array($id));
?>
тут мы видим id=?,"array($id)) , именно эта конструкция непозволяет производить sql-inj в PDO, можно использовать и id='$id' , но тут уже нужно тщательно смотреть на фильтрацию переменной. (не буду описывать почему именно и что не дает проводить инъекции)
3) MYSQL_FETCH_ASSOC - MYSQL_FETCH_ARRAY:
Данный метод использовать в PDO можно следующими способами
<?php
$q = DB::run() ->query("SELECT `name` FROM `user` WHERE `id`=? LIMIT 1",array($id));
$q = $q - >fetch();
/* или */
$q = DB::run() - > queryFetch("SELECT `name` FROM `user` WHERE `id`=? LIMIT 1",array($id));
?>
3) Циклы WHILE и FOREACH:
<?php
/* while */
$while = DB::run() ->query("SELECT * FROM `user`"
;
while($while = $while - > fetch()){
echo $while['name'].' - '.$while['datereg'].'<br/>';
}
/* foreach тут лучше использовать несколько иной метод, итак поехали*/
$foreach = DB::run() ->query("SELECT * FROM `user`"
;
$foreach = $foreach - > fetchAll();
foreach($foreach AS $fors){
echo $fors['name'].' - '.$fors['datereg'].'<br/>';
}
?>
4) MYSQL_AFFECTED_ROWS - MYSQL_NUM_ROWS:
<?php
/* тут тоже существует два способа получения данных*/
/* первый способ */
$one = DB::run() ->query("SELECT * FROM `user`"
;
$one = $one -> fetchAll();
$ones = count($one);
if($ones > 0){
echo $ones;
}
/* второй способ, он мне нравится больше */
$two = DB::run() -> query("SELECT * FROM `user`"
;
if ($two -> rowCount() > 0) {
echo $two->rowCount();
}
?>