Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Рабочая тетрадь(4)

.pdf
Скачиваний:
36
Добавлен:
10.02.2016
Размер:
7 Мб
Скачать
☆

$sql = "SELECT id, name, email FROM users";

$stmt = $db -> query($sql);

$stmt -> setFetchMode(PDO::FETCH_NUM);

$row = $stmt -> fetch();

class User {public $id, $name, $email;}

$user = new User();

$stmt -> setFetchMode(PDO::FETCH_INTO, $user);

$stmt ->

setFetchMode(PDO::FETCH_CLASS, "User", $args);

$stmt -> setFetchMode(

PDO::FETCH_CLASS |PDO::FETCH_PROPS_LATE, "User", $args);

$sql = 'SELECT email FROM users

WHERE id = :id AND name = :name';

$stmt = $db -> prepare($sql);

$stmt -> execute(

array(

':id' => 5,

':name' => 'John'));

$john = $stmt->fetchAll();

$stmt -> execute(

array(

'id' => 6,

'name' => 'Mike')); $mike = $stmt->fetchAll();

$sql = 'SELECT email FROM users

WHERE id = ? AND name = ?';

$stmt = $db -> prepare($sql);

$stmt -> execute(array(5, 'John'));

$john = $stmt->fetchAll();

$stmt -> execute(array(6, 'Mike'));

$mike = $stmt->fetchAll();

$id = 5; $name = 'John';

Для 'WHERE id = :id AND name = :name'

$stmt = $db -> prepare($sql);

$stmt -> bindParam(':id', $id, PDO::PARAM_INT);

$stmt -> bindParam(':name', $name, PDO::PARAM_STR, 25);

$stmt -> execute();

Для 'WHERE id = ? AND name = ?'

$stmt = $db -> prepare($sql);

$stmt -> bindParam(1, $id, PDO::PARAM_INT);

$stmt -> bindParam(2, $name, PDO::PARAM_STR, 25);

$stmt -> execute();

$id = 5; $name = 'John';

$stmt = $db -> prepare('CALL getEmail(?,?,?)');

Параметр IN

$stmt -> bindParam(1, $id, PDO::PARAM_INT);

Параметр INOUT

$stmt -> bindParam(2, $name,

PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 25);

Параметр OUT

$stmt -> bindParam(3, $email, PDO::PARAM_STR, 25);

$stmt -> execute();

print("User: $name : E-mail: $email");

$id = 5;

Вариант 1

$db -> query('CALL getEmail($id, @name, @email)');

$result = $db -> query('SELECT @name, @email');

Вариант 2

$stmt = $db -> prepare('CALL getEmail(:id, @name,

@email)');

$stmt -> bindParam(':id', $id, PDO::PARAM_INT);

$stmt -> execute();

$result = $db -> query('SELECT @name, @email');

$arr = $result -> fetch();

echo $arr[@name] . ':' . $arr[@email];

$sql = 'SELECT id, name, email FROM users';

$stmt = $db -> prepare($sql);

$stmt -> execute();

$stmt -> bindColumn(1, $id);

$stmt -> bindColumn(2, $name);

$stmt -> bindColumn('email', $email);

while($row = $stmt -> fetch(PDO::FETCH_BOUND) echo "$id : $name : $email\n";

try {

$db -> beginTransaction();

$db -> exec("INSERT INTO users

VALUES(1, 'John', 'Smith')"); $db -> exec("INSERT INTO users

VALUES(2, 'Mike', 'Doe')");

$db->commit();

}catch (PDOException $e) { $db -> rollBack();

}

Лабораторная работа 3.2

Использование транзакций

Упражнение 1: Использование транзакции в конструкторе класса

•В текстовом редакторе откройте файл news\NewsDB.class.php

•В конструкторе класса создайте транзакцию при создании и заполнении таблиц базы данных

•Транзакция должна обеспечивать создание базы данных, создание таблиц и заполнение таблицы category

•В браузер должно выводится сообщение о невозможности создания базы данных

•Сохраните файл news\NewsDB.class.php

•Сделайте копию базы данных news.db и удалите оригинал

•Запустите браузер

•В адресной строке наберите http://mysite.local/news/news.php

•Вы должны увидеть страницу с HTML-формой без новостей

•Если есть ошибки, найдите и исправьте их

•Удалите базу данных news.db

•В текстовом редакторе откройте файл news\NewsDB.php

•Сделайте ошибку в запросе при заполнении таблицы category

•Сохраните файл news\NewsDB.php

•Запустите браузер

•В адресной строке наберите http://mysite.local/news/news.php

•Вы должны получить сообщение о невозможности создания базы данных

•Обратите внимание на то, что файл news.db создается, но нулевой длины

•В конструкторе класса NewsDB внесите изменение в условие, которое учитывает не только наличие файла базы данных, но и его размер

$db = new PDO('sqlite:db');

$sql = "SELECT type, data FROM images WHERE id=?";

$stmt = $db -> prepare($sql);

$stmt -> execute(array($_GET['id']));

$stmt->bindColumn(1, $type, PDO::PARAM_STR, 256);

$stmt->bindColumn(2, $lob, PDO::PARAM_LOB);

$stmt->fetch(PDO::FETCH_BOUND);

header("Content-Type: $type");

fpassthru($lob);