таже самая концепция для PDO MYSUBD PDO v 0.1 протестированы бд ACCESS (ODBC) MYSQL access работает только в кодировке windows-1251 PHP: <pre> <?php #utf8 document (кодировка windows-ANSI для Access) #MYSUBD PDO v 0.1 class easyDB extends PDO { static private $_PDO = null; //protected function __construct(){} static public function start(){ if (self::$_PDO == null) { try { /*ms access odbc*/ $db = self::$_PDO = new easyDB ("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\myBase.mdb;Uid=Admin"); // подключение /*mysql*/ #$db = self::$_PDO = new easyDB ("mysql:host=localhost;dbname=mini_guest_book", "root", ""); // подключение } catch(PDOException $e) { die ('<b>Ошибка базы данных PDO - connection</b><hr>'.$e->getMessage()); } //ошибка подключения #установка кодировки базы данных MYSQL /*$sql_charset = 'utf8'; $db->exec("set character_set_client='$sql_charset'"); $db->exec("set character_set_results='$sql_charset'"); $db->exec("set collation_connection='{$sql_charset}_general_ci'");*/ } return self::$_PDO; } #normal class public function read($query) { #line if ($res = self::$_PDO->query($query)) { $res->setFetchMode(PDO::FETCH_NUM); #включение режима числовых массивов return $res->fetch(); } return false; } public function read_all($query) { #table if ($res = self::$_PDO->query($query)) { $res->setFetchMode(PDO::FETCH_NUM); #включение режима числовых массивов while ($row = $res->fetch()) { $ret[] = $row; } if (isset($ret)) { return $ret; } } return false; } public function read_one($query) { #one $res = self::$_PDO-> read($query); return $res[0]; } } #end class $db = easyDB::start(); #$db->exec ("UPDATE gbook SET message = 'привет мир' WHERE id =1"); $res = $db->read_all('SELECT * FROM myTable WHERE id = 1'); if ($res) { print_r ($res); } else { print 'нет значений'; } все тоже самое синглтон, mysql_read, интуитивное подключение
оба на? и чо помогает? а там есть методы ->select ->join ->where ->order и т.д. ? Используя Zend DB, я могу абстрагироваться от SQL хрени создавая реально переносимый код. А вот pdo этого уже не может. Т.к. мало лишь создать абстрактый интерфейс, нужны еще и методы для генерации самих запросов.
SQL - это и есть тот самый абстрагированный язык, единый для большинства баз данных, если писать следуя стандартам. ИМХО, всякие привлекают лишь новичков. По мне так проще и понятнее написать полный sql запрос. Если абстрагироваться, то лучше делать это уже полностью переходя на объекты баз данных. Не работал с классами абстракции моделей на пхп, но подобные есть, к примеру, в Django фреймворке http://djangobook.com/en/2.0/chapter05/ или на русском тут http://djbook.ru/ch05.html Чем больше предполагаемая "лёгкость" тем более грузной становится реализации, при этом теряя гибкость.
оп , а я подумал что это старая тема забрал , спс =) 2 вопроса: можно ли как-то делать апдейт массивом и можно ли как-то заменить в запросах `` на '' ? меня эти кавычки просто ужс как бесят :> кавычки сделал , хоть и работает , но я сомневаюсь что это валидно =) например PHP: <? public function insert($request, $data, $column){ $request = $this->query_process($request, $data); $request=explode("VALUES",$request); $request[0] = str_replace("'", "`", $request[0]); $request=$request[0]."VALUES".$request[1]; $query = mysql_query($request, $this->conn) or die("Cannot execute request to the database '{$request}'"); $query = mysql_query("SELECT last_insert_id() as `{$column}`", $this->conn); $array = $this->result2array($query); return isset($array[0][$column]) ? $array[0][$column] : 0; } ?> спасибо
я бы согласился если б он был одинаковым во всех реализациях СУБД. года 3 наверное тоже шпилил на всяких PDO и прочих самоделках. но с возрастом и с опытом приходит понимание - что все это хрень и велосипедостроение каждый раз и нет никакой переносимости. так что лучше использовать абстрактный синтаксис. кроме того подобный снтаксис выглядит гораздо чище при добавлении различных условий и фильтров. с чистым sql не идет не в какое стравнение по читаемости
Года пошли вам не на пользу - называть pdo "самоделкой". Есть SQL и есть его расширения специфичные для субд. И сколько надстроек вы не пишите - вы не сможете сделать специфичные вещи кросс-субдшными. Так что аргумент переноса на другую базу - это вообще не аргумент выбора pdo или классов фреймворка. Тут совсем другие задачи решаются. И не исключено, что интерфейсы некого фреймоврка Х работают через pdo (например, Yii).
А мужики то и не знают. Я прекрасно осведомлен что в самом ZF DB адаптеры используют PDO. Самоделки - это очередные классы для облегчения работы с БД. Люди пишут свои велосипеды в том числе и с PDO. Когда используеж PDO напрямую - в этом тоже ничего хорошего нет.
PDO или не PDO - факт есть факт - хотите что бы работало быстро и эффективно - придётся использовать нестандартные SQL расширения для конкретной базы данных, а это значит в нужных местах опускаться до старого доброго SQL в чистом виде - тут решает то, насколько просто это сделать. Мне этим и нравится Yii - там что AR достойный и шустрый, и опускаться до голого SQL не приходится через задний проход - DAO уровень публично доступен и позволяет писать любой SQL с подстановкой параметров и прочими плюшками фреймворка. Упростители SQL хорошо, но на самом деле не совсем то, что хочется. Всёравно приходится много писать, так что по хорошему нужно уходить в сторону AR/Data Mapper/ORM (последнее правда для PHP как такового слишком монструозно и тяжко) и использовать вставки специфичного SQL где требуется.
вообщем получается надо использовать PDO c абстрактным классом для "простых действий" и прямой SQL для специфических запросов.
PDO и есть прямой SQL. PDO - это общий интерфейс передачи запроса и получения данных для разных субд.
апну-ка я тему $inv="asdasd"; PHP: <? $result = $db->select("SELECT * FROM lale_inv WHERE invname={$inv}"); если вместо инв цифры , тогда всё ок где туплю ? :<
в апострофы нужно брать строки PHP: $result = $db->select("SELECT * FROM lale_inv WHERE invname='{$inv}'");
вот это ' - я называю апостроф а вот это ` я не знаю как называется, вот в них и заключают название полей и таблиц
` - апостроф ' - кавычка В типографии конечно нет одинарной кавычки, а знак ` зовется обратным апострофом. Но в программировании чтобы небыло путаницы, ' - это одинарная кавычка.
собственно википедия думает тоже как я http://ru.wikipedia.org/wiki/%D0%90%D0% ... 0%BE%D1%84 там нет названия символа `