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

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

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

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

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

Код:
<?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;
?>
Запросы.
Код:
<?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$caloriesPDO::PARAM_INT);
$query->bindParam(2$colour,   PDO::PARAM_STR12);
//Выполнить запрос.
$query->execute();
 
//или
 
//Шаблон запроса.
$query  $db->prepare('SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour');
//Подготовка переменных.
$query->bindParam(':calories'$caloriesPDO::PARAM_INT);
$query->bindParam(':colour',   $colour,   PDO::PARAM_STR12);
//Запрос.
$query->execute();
 
?>
Откаты.
Код:
<?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"); //Натворили глупостей.
 
?>
Организация вывода.
Код:
<?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 (108)
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 (108)
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
Код:
<?php
 
// Не обрабатывать заявленные параметры.
$array = array('value one''value two');
DB :: $db -> sql("INSERT INTO `test` (`field_one`, `field_two`) VALUES (?, ?);"$arrayDB :: 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(228123);
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.1
0.013 s