КОнтакты, предложения, отзывы

.rar или .zip
Вложение
Онлайн-чат
На этом сайте, вы найдёте полезную информацию, практические советы в области веб-программирования, веб-дизайна и веб-разработок в целом. Мы с удовольствием поделимся с вами реальными примерами и решениями задач, связанных с jQuery , JavaScript , PHP и MySQL , версткой сайтов , поможем разобраться новичкам с современными технологиями, такими как Ajax , HTML5 , CSS3 и многими другими.

PDO::великий и могучий

Недалёк уже тот день, когда функции, служившие верой и правдой, но начинающиеся на mysql, будут безжалостно искоренены и выброшены на... из ПХП. :(
PDO (PHP Data Objects) - это альтернативное решение для доступа к базам данных. И если через MySQL и MySQLI можно работать только с базами mysql, то PDO поддерживает практически все основные типы баз данных. PDO доступен только при помощи обьектов. Но это не страшно и скоро вы в этом убедитесь.
Синтаксис PDO похож на MySQLI. Для соединения с базой нужно создать обьект класса PDO:
try{
  $db=new PDO('mysql:host=localhost; dbname=mysite', 'root', '');  
}catch(PDOException $err){
  echo 'Ошибка соединения ' . $err->getMessage(). '<br>
        в файле '.$err->getFile().", строка ".$err->getLine();
  exit;
}

В качестве первого параметра конструктор обьекта класса PDO принимает тип базы и её настройки, в случае с mysql это хост и имя. Вторым и третим параметром нужно указать имя пользователя и пароль. Переход с одного типа бд на другой в PDO происходит при помощи замены в одной строчке кода при условии что SQL-запросы это позволяют и будут составлены верно. Итак, поехали.

Самый простой запрос на выборку:

echo "<h2> Вывод заголовков статей</h2>";
$sql='select * from `statti` order by `id` desc limit 3';
if(!$result=$db->query($sql)){
  echo 'Скорее всего запрос составлен неверно';
}else{
  while ($title=$result->fetch(PDO::FETCH_ASSOC)){
    echo $title['title']."<br>";
  }
}
С помощью метода query обьекта $db выполняем запрос, дальше говорим что нам нужен ассоциативный массив и в цикле while проходим по нему. По умолчанию fetch() возвращает оба массива - ассоциативный и нумерованый

Помещение результатов в массив:

$sql='select * from `statti` order by CHARACTER_LENGTH(trim(`title`))';
$result=$db->query($sql);
$title=$result->fetchAll(PDO::FETCH_ASSOC);
foreach($title as $titl){
  echo $titl['title']."<br>";
}
FetchAll() вернёт нам смассив, в который будут свалены все строки выборки.

Вывод с помещением столбцов в переменные

$sql='select * from `statti`';
$result=$db->query($sql);
$result->bindcolumn('id', $id);
$result->bindcolumn('title', $title);
while($result->fetch()){
  echo "$id, $title<br>";
}
BindColumn() свяжет названия полей таблицы с переменными.

Вывод строк через обьект

$sql='select * from `statti`';
$result=$db->query($sql);
while ($title=$result->fetch(PDO::FETCH_OBJ)){
  echo $title->title."<br>";
}

Выполнение запроса с привязкой PHP переменных

$id = 1;
$sth = $db->prepare("SELECT *  FROM `citata` WHERE `id`= :id");
$sth->bindParam(':id', $id, PDO::PARAM_INT);
$sth->execute();
while($success=$sth->fetch()){
  echo $success['id'] . " " . $success['citata'];
}
Метод bindparam() связывает предлагаемые маркеры в запросах с переменными и приводит их к нужному типу.

Альтернативный вариант: отмывка нала во время выполнения:

$sql='select * from `statti` where `id`between :id and :id2';
$stmt=$db->prepare($sql);
$id='1';
$id2='5';
// прямо во время выполнения запроса обезвредит и печать поставит:
$stmt->execute(array(':id'=>$id, ':id2'=>$id2));
while($stmt->fetch()){
  echo $title.'<br/>';  
}

Подготовленные запросы

Запрос с использованием like, проценты нужно добавлять к переменным:
$sql='select * from `statti` where `title` like ? or `id` like ?';
$stmt=$db->prepare($sql);
$title='%jQuery%';
$id = 13;
$stmt->bindValue(1, $title, PDO::PARAM_STR);
$stmt->bindValue(2, $id, PDO::PARAM_INT);
$stmt->execute();
while($row=$stmt->fetch()){
  echo $row['title'].'<br>';
}
$sql='select * from `statti` where match (`discription`) against  (?)';
$stmt=$db->prepare($sql);
$title='jQuery';
$id = '%13%';
$stmt->bindValue(1, $title, PDO::PARAM_STR);
$stmt->execute();
while($row=$stmt->fetch()){
  echo $row['title'].'<br>';
}

INSERT

include_once 'db.php';
echo '<h2>INSERT</h2>';
$sql = "insert into `citata` (`citata`) values (:citata)";
$stmt=$db->prepare($sql);
$citata='По статистике майкрософт в наших странах виндой люди не пользуются';
$stmt->bindValue(':citata', $citata);
$stmt->execute();
echo '<p> Было вставлено строк: ' . $stmt->rowCount() . '</p>';
echo '<p> ID: ' . $db->lastinsertid() . '</p>';
Сначала запрос подготавливается (prepare).
Для обезвреживания введённых данных PDO имеет свои встроенные средства. В MySQLI с использованием подготовленных запросов используются знаки вопроса, здесь же используется двоеточие и имя, которые затем связываются с обезвреженными переменными связи (bindValue).
Хотя PDO тоже может так делать:
$stmt = $db->prepare("INSERT INTO `statti` (`title`, `text`) VALUES (?, ?)");
$stmt->bindParam(1, $title);
$stmt->bindParam(2, $text);
И запрос выполняется (execute).

Выбор статьи по требованию

$stmt = $db->prepare("SELECT * FROM `statti` where `id` = ?");
if ($stmt->execute(array($_GET['id']))){
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}

UPDATE

include_once 'db.php';
$sql='update `citata` set `citata`=:citata where `id`=:id';
$stmt=$db->prepare($sql);
$citata='PDO';
$id='13';
$stmt->execute(array(':citata'=> $citata, ':id'=>$id));
echo '<p>Обновлено строк: ' . $stmt->rowCount() . '</p>';
2015.06.29 459

Однажды ты спросишь меня, что для меня на первом месте: ты или программирование? Я отвечу тебе, что программирование. И ты уйд..ешь, так и не узнав, что ты для меня на нулевом месте.
Войдите или Зарегистрируйтесь чтобы оставить комментарий

Комментарии


    Яндекс.Метрика Яндекс.Метрика