Вы не зашли.
Главная » PHP » PDO
#1. tipsun Off (19)
Moderator
2011.03.28 16:04
Да простят меня все те, кому тема не понравилась.

Поправьте если что, пожалуйста.
Буду очень благодарен.

Весь код будет занесён в этот пост!

Обозначения:
1? - первый вопрос, 2? - второй вопрос и т.д.

Соединение/Разъединение с базой.

Код:
span style="color: #0000BB"><?php//Соединение. //Gemorroj, Nu3oN - спс за поправки.$base = array('localhost', //Host'root', //User'', //Pass'tsb', //Base'utf8'); //Char if('5.3.6' > phpversion()) { $attr[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES `'.$base[4].'`;'; } $db = new PDO('mysql:host='.$base[0].';dbname='.$base[3].';charset='.$base[4].';', $base[1], $base[2], $attr);//Разъединение$db = null;?>
Запросы.
Код:
span style="color: #0000BB"><?php//Статичный: SELECT.$query = $db->query($QUERY_TEXT);//Статичный: INSERT, UPDATE, итд.$result = $db->exec($QUERY_TEXT); //в $result записывается количество затронутых строк.//Переменный: ОБЩИЙ, упорядоченный.//В примерах ниже экранировать символы (', ", и кажется \) не требуется.//Шаблон запроса.$query = $db->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ? AND colour = ?');//Запрос, где 1?=1-элемент массива, 2?=2-элемент массива.$query->execute(array($calories, $colour));//или//Шаблон запроса.$query = $db->prepare('SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour');//Запрос, ну тут все наглядно.$query->execute(array(':calories' => $calories, ':colour' => $colour));//Переменный: ОБЩИЙ, с подготовкой данных.//Шаблон запроса.$query = $db->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ? AND colour = ?');//Подготовка переменных, где 1=1? и 2=2?.$query->bindParam(1, $calories, PDO::PARAM_INT);$query->bindParam(2, $colour, PDO::PARAM_STR, 12);//Выполнить запрос.$query->execute();//или//Шаблон запроса.$query = $db->prepare('SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour');//Подготовка переменных.$query->bindParam(':calories', $calories, PDO::PARAM_INT);$query->bindParam(':colour', $colour, PDO::PARAM_STR, 12);//Запрос.$query->execute();?>
Откаты.
Код:
span style="color: #0000BB"><?php$db->beginTransaction(); //Транзакция, отключение авто-фиксации изменений.$query1 = $db->exec("DROP TABLE fruit");$query2 = $db->exec("UPDATE dessert SET name = 'hamburger'");$db->rollBack(); //Принц Персии (Все изменения отклонены до $db->beginTransaction();). //Транзакция снова на авто-фиксации изменений. //До тех пор, пока снова не укажите: $db->beginTransaction();//////Видимо это при сложных случаях...$db->beginTransaction(); //Транзакция, отключение авто-фиксации изменений.$query = $db->exec("DROP TABLE fruit"); //Натворили глупостей.$db->commit(); //Плюнули и пошли дальше. //Транзакция снова на авто-фиксации изменений.//Почему нельзя тогда просто так? Ведь автофиксация изменений.$query = $db->exec("DROP TABLE fruit"); //Натворили глупостей.?>
Организация вывода.
Код:
span style="color: #0000BB"><?php//Запрос #1.$q1 = $db->prepare('SELECT foo FROM bar');//Запрос #2 итд.$q2 = $db->prepare('SELECT foobaz FROM foobar');//Выполнить запрос #1.$q1->execute();//Извлечь запрос #1.$q1->fetch();//Завершить операции с запросом #1 (типа что-ли).$q1->closeCursor();//Выполнить запрос #2.$q2->execute();//... итд.///////Для разового вывода$query = $db->query("SELECT name FROM fruit WHERE calories = 100 LIMIT 1;");if($query->rowCount()) { foreach($query as $row) { print 'Name: '.$row['name'].'<br/>'; } } else { print 'Нет такой записи'; }$db = null;///////Для постраничного вывода$count = $db->query("SELECT COUNT(*) FROM fruit WHERE calories > 100;")->fetchColumn();if($count) { foreach($db->query("SELECT name FROM fruit WHERE calories > 100;") as $row) { print 'Name: '.$row['name'].'<br/>'; } } else { print 'Нет таких записей'; }$count = null;$db = null;?>
Отредактировано tipsun (2011.04.14 16:04)
#2. Gemorroj Off (107)
Administrator
2011.03.28 18:06
beginTransaction - это транзакция.
bindParam. 1 - номер элемента, который биндим. PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT - параметры валидации
с COUNT вообще логика не правильная
#3. tipsun Off (19)
Moderator
2011.03.28 20:08
Gemorroj написал:
с COUNT вообще логика не правильная
Это я на php.net взял smile
Точно, вроде понял. СПС!
Отредактировано tipsun (2011.03.29 17:05)
#4. tipsun Off (19)
Moderator
2011.03.30 22:10
Что еще стоит рассмотреть?
#5. Gemorroj Off (107)
Administrator
2011.03.30 22:10
да для большинства случаев и этого выше крыши) а так - знания приходят с опытом. пиши скрипты, по ходу узнаешь чтонить новое.
#6. tipsun Off (19)
Moderator
2011.03.30 22:10
СПС, что глянул smile
Я потом еще чуть добавлю про bindValue и другое
#7. Nu3oN Off (11)
Moderator
2011.04.18 02:02
На досуге поправил костыль http://nu3on.7je.ru/download/ForEnlargement_of_PDO.zip
Я буду лучше голоден, но между креслом и рулем и на дороге.
#8. tipsun Off (19)
Moderator
2011.04.18 09:09
Из костыля, index.php -примеры. Кажется там забыли внести параметры. smile
Код:
span style="color: #0000BB"><?php// Не обрабатывать заявленные параметры.$array = array('value one', 'value two');DB :: $db -> sql("INSERT INTO `test` (`field_one`, `field_two`) VALUES (?, ?);", $array, DB :: PARAM_NOT_SQL);// Если не указать, то параметры так же не будут обрабатываться.$array = array('value one', 'value two');DB :: $db -> sql("INSERT INTO `test` (`field_one`, `field_two`) VALUES (?, ?);"); // ", $array ?// Обрабатывать заявленные параметры.$array = array(9999, 'value two');DB :: $db -> sql("INSERT INTO `test` (`field_one`, `field_two`) VALUES (?, ?);", DB :: PARAM_ALL_SQL); // ", $array, DB :: PARAM_ALL_SQL ?// Ообрабатывать заявленные параметры как числа.$array = array(228, 123);DB :: $db -> sql("INSERT INTO `test` (`field_one`, `field_two`) VALUES (?, ?);", DB :: PARAM_INT_SQL); // ", $array, DB :: PARAM_INT_SQL ?// Ообрабатывать заявленные параметры как строки.$array = array('value \'one\r\n /', 'value two');DB :: $db -> sql("INSERT INTO `test` (`field_one`, `field_two`) VALUES (?, ?);", DB :: PARAM_STR_SQL); // ", $array, DB :: PARAM_STR_SQL ??>
Отредактировано tipsun (2011.04.18 09:09)
Страниц: 1
Главная
WEB
PunBB Mod v0.6.2
0.012 s