Демо

Примеры использования PDO MySQL

Ниже приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и удаление данных. Подробнее о методах PDO можно узнать на php.net.

Для примеров используется таблица `category` с полями `id` , `name` и `parent` .

Подключение к серверу MySQL

$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');

Четвертым параметром конструктора PDO можно указать параметры подключения, например SQL запрос который будет выполнен сразу после подключения:

$dbh = new PDO(' mysql:dbname=db_name;host=localhost', 'логин', 'пароль', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'") );

Чтобы отследить ошибку подключения к БД используется исключение:

try < $dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль'); >catch (PDOException $e) < die($e->getMessage()); >
SQLSTATE[HY000] [1045] Access denied for user 'логин'@'localhost' (using password: YES)

Выборка из БД

Выборка одной записи

PDO позволяет использовать в запросах псевдопеременные чтобы исключить SQL инъекции. В самом запросе в место данных указывается ? или :id , а в методе execute() указываются реальные значения этих переменных.

$sth = $dbh->prepare("SELECT * FROM `category` WHERE `id` = ?"); $sth->execute(array('21')); $array = $sth->fetch(PDO::FETCH_ASSOC); print_r($array);
$sth = $dbh->prepare("SELECT * FROM `category` WHERE `id` = :id"); $sth->execute(array('id' => '21')); $array = $sth->fetch(PDO::FETCH_ASSOC); print_r($array);
Array ( [id] => 21 [parent] => 3 [name] => Хурма ) 

Выборка всех записей таблицы

Данный пример получает всю таблицу в виде ассоциативного массива:

$sth = $dbh->prepare("SELECT * FROM `category` ORDER BY `name`"); $sth->execute(); $array = $sth->fetchAll(PDO::FETCH_ASSOC); print_r($array);
Array ( [0] => Array ( [id] => 16 [parent] => 3 [name] => Абрикос ) [1] => Array ( [id] => 28 [parent] => 3 [name] => Авокадо ) . )

Получить значение поля одной записи

$sth = $dbh->prepare("SELECT `name` FROM `category` WHERE `id` = ?"); $sth->execute(array('21')); $value = $sth->fetch(PDO::FETCH_COLUMN); echo $value; // Выведет "Хурма"

Получение всех значений одного столбца таблицы

Пример получает все значения поля `name` из таблицы `category` .

$sth = $dbh->prepare("SELECT `name` FROM `category`"); $sth->execute(); $array = $sth->fetchAll(PDO::FETCH_COLUMN); print_r($array);
Array ( [0] => Мороженое [1] => Овощи [2] => Фрукты [3] => Ягоды [4] => Грибы [5] => Морепродукты [6] => Смеси . )

Получение структуры таблицы

$sth = $dbh->prepare("SHOW COLUMNS FROM `category`"); $sth->execute(); $array = $sth->fetchAll(PDO::FETCH_ASSOC); print_r($array);
Array ( [0] => Array ( [Field] => id [Type] => int(10) unsigned [Null] => NO Пример базы данных php скрипты => PRI [Default] => [Extra] => auto_increment ) [1] => Array ( [Field] => parent [Type] => int(11) unsigned [Null] => NO Пример базы данных php скрипты => [Default] => 0 [Extra] => ) [2] => Array ( [Field] => name [Type] => varchar(255) [Null] => NO Пример базы данных php скрипты => [Default] => [Extra] => ) )

Добавление записей в БД

$sth = $dbh->prepare("INSERT INTO `category` SET `parent` = :parent, `name` = :name"); $sth->execute(array('parent' => 1, 'name' => 'Виноград')); // Получаем id вставленной записи $insert_id = $dbh->lastInsertId();

Изменение записей

$sth = $dbh->prepare("UPDATE `category` SET `name` = :name WHERE `id` = :id"); $sth->execute(array('name' => 'Виноград', 'id' => 22));

Удаление из БД

$count = $dbh->exec("DELETE FROM `category` WHERE `parent` = 1"); echo 'Удалено ' . $count . ' строк.';

Или метод c псевдопеременными:

$sth = $dbh->prepare("DELETE FROM `category` WHERE `parent` = :parent"); $sth->execute(array('parent' => 1));

Обработка ошибок

В PDO есть метод errorInfo() который возвращает сведенья об ошибке последнего запроса.

// Таблицы `category_new` нет в БД. $sth = $dbh->prepare("INSERT INTO `category_new` SET `parent` = :parent, `name` = :name"); $sth->execute(array('parent' => 1, 'name' => 'Виноград')); $info = $sth->errorInfo(); print_r($info);
Array ( [0] => 42S02 [1] => 1146 [2] => Table 'database.category_new' doesn't exist )

Комментарии 1

О

Функция debugDumpParams объекта PDOStatement используется для вывода параметров подготовленного оператора. Это может быть полезно для отладки и устранения неполадок, поскольку позволяет увидеть точный SQL-запрос, который будет выполнен, а также значения любых установленных заполнителей.
Например, рассмотрим следующий код:

$sth = $dbh->prepare(‘SELECT * FROM users WHERE name = :name AND age = :age’);
$sth->bindParam(‘:name’, $name);
$sth->bindParam(‘:age’, $age);
$name = ‘John’;
$age = 35;
$sth->debugDumpParams();

SQL: [114] SELECT * FROM users WHERE name = :name AND age = :age
Params: 2
Key: Name: [5] :name
paramno=-1
name=[5] «:name»
is_param=1
param_type=2
Key: Name: [4] :age
paramno=-1
name=[4] «:age»
is_param=1
param_type=2

Вывод показывает SQL-запрос с заполнителями и значениями заполнителей (в данном случае :name — «John», а :age — 35). Это может быть полезно для проверки того, что в запросе используются правильные значения, или для выявления проблем с запросом или заполнителями.
Надеюсь, это поможет! Дайте знать, если у вас появятся вопросы.

Авторизуйтесь, чтобы добавить комментарий.

Источник

Пример базы данных php скрипты

БлогNot. Простейший скрипт на PHP+MySQL с базой данных и инсталлятором

Простейший скрипт на PHP+MySQL с базой данных и инсталлятором

  • корректная обработка параметров, переданных по GET и POST с удалением специальных символов и лишних пробелов (переводов строк);
  • корректная обработка кавычек;
  • отдельный файл настроек, в котором будут прописаны параметры соединения с MySQL;
  • файл-инсталлятор, который создаст базу данных и потом удалится (для простоты не будем удалять его программно);
  • файл операций с БД, по возможности не делающий лишних переподключений к базе;
  • файл-пример заполнения БД с простейшим контролем (например, не разрешать добавлять ту же самую запись по обновлению страницы после отправки данных).

Возможно, попозже сделаю их этого статейку.

К файлам проекта подключать будем только functions.php , а он позаботится об остальных служебных файлах:

 function magic ($path) < ini_set('magic_quotes_runtime', '0'); ini_set('magic_quotes_sybase', '0'); //В php.ini magic_quotes_gpc=1. Она не меняется программно - см. доки if (@get_magic_quotes_gpc()=='1')< $path=str_replace('\\"','"',$path); $path=str_replace("\\'","'",$path); $path=str_replace("\\\\","\\",$path); >return $path; > ?>

Файл обработки параметров params.php :

Файл операций с базой данных db.php :

 function dbquery ($sql) < $result=mysql_query($sql,get_conid()); return $result; >function dbfetcha ($result) < if ($row=mysql_fetch_assoc ($result)) return $row; else return false; >function dbfetch ($result) < if ($row=mysql_fetch_array($result)) return $row; else return false; >function dbrows ($result) < $num=mysql_num_rows($result); return $num; >function dbfree ($result) < mysql_free_result($result); >function dbclose ($conid) < mysql_close(get_conid()); >function get_conid () < static $conid=0; if ($conid==0) < $conid=dbconnect(); mysql_set_charset (DB_CODEPAGE,$conid); >return $conid; > get_conid (); > ?>

Более новая версия этого файла,основанная на расширении MySQLi вместо MySQL есть в этой заметке.

Основной демо-файл index.php :

   '; if (file_exists('install.php')) < print '

Пожалуйста, выполните файл install.php из папки скрипта или удалите его, если Вы уже выполнили его ранее. Обновить эту страницу'; exit; > if (!empty($title) and !empty($message)) < //Нужные параметры непусты? $sql = 'select title,message from '.DB_TABLE.' where title="'.$title.'" and message="'.$message.'"'; $result = dbquery($sql) or die (mysql_error()); if (dbrows($result)<1) < //Добавить сообщение в базу: $sql = 'insert into '.DB_TABLE.' (title,message) values ("'.$title. '", "'.$message.'")'; $result = dbquery($sql) or die (mysql_error()); >else < echo '

Такое сообщение уже было добавлено ранее

'; > > //Вывод формы для добавления сообщений: print '

Заголовок:

Сообщение:

'; //Получить и показать все имеющиеся записи БД: $sql = 'select * from '.DB_TABLE.' order by id desc'; //Сортируем по номеру записи в обратном порядке $result = dbquery($sql) or die (mysql_error()); if ($result and dbrows($result)) < //Если есть непустой результат, while ($data = dbfetcha($result)) < //то пока есть записи, print '

'.$data['title'].': '; //вывести заголовок print $data['message'].'

'."\n"; //и сообщение с переводом строки > > print ''; ?>

Файл-инсталлятор install.php создаст базу данных и таблицу в ней (если база уже существовала, она удалится).

   '; if (empty($action)) < print '

Нажмите кнопку для создания базы данных демо-скрипта. после успешного завершения, удалите файл install.php '; > else < $error=''; for ($i=0; $iНе удалось выполнить запрос: '.$sqls[$i].''; > > if (!empty($error)) < print '

Возникли ошибки!'.$error.'

'; > else < print '

База данных успешно создана! Перейти к скрипту

'; > > print ''; ?>

Предполагается, что все файлы «лежат» в одной папке на сервере. Требования к версии PHP: функция mysql_set_charset появилась в PHP 5.0.7, так что на хосте должна быть версия не ниже.

P.S. Примерно то же самое, но для простоты без инсталлятора и проверенное в PHP 8 + MySQLi вместо MySQL.

11.06.2011, 11:57 [18089 просмотров]

Источник

Читайте также:  Ввод данных через пробел python
Оцените статью