mysqli_fetch_all Ты просто понятия не имеешь, что указывать поля в запросе вообще нифига не обязательно - это основы синтаксиса SQL
Alex_pac в качестве аватарки разрешены только личные фото зы: по уму нужен общий интерфейс для нескольких драйверов, транзакции, именованные плейсхолдеры
php >=5.3 only так или иначе ты не можешь найти чтото более простое и наглядное чем PHP: sql_insert('table',array( 'value1','value2','value3')); я могу поставить но вы же все равно не будете уверены что я там изображен.
около 50 функций в mysql, а в mysqli - более 100. Если сравнивать с mysqli, не умеет подсчитывать количество полей, получать ошибку mysql или код ошибки mysql, получать информацию о сервере mysql, создавать постоянные соединения, работать с несколькими соединениями, составлять подготовленные запросы, очищать результат запроса, даже не умеет объединять запросы в транзакции, не говоря уже о банальном получении выборки в ассоциативный массив. Код даже не отформатирован.
думаю, что транзакции можно делать и вручную sql запросом. а вот всё остальное уже имеется, в том числе единый интерфейс для мускула и постгреса. если кого-нибудь заинтересует как это выглядит - выложу код и для постгреса. не очень удобный
ну любой класс - это вещь в себе. Кроме инкапсуляции - разницы нет. но работать с БД через функции облаченные в другие функции в 2011 году - это как-то уже попахивает...
Alex_pac непонимаю зачем вам они? вы не уверены своих действиях? в этих двух вопросах нет связи. транзакции имеют смысл и при нескольких потоках.
я на каждый запрос делаю проверку и запись в лог, плюс отправка имейла о том что пошли проблемы с БД =) хуле. А показыавать посетителям ошибки нельзя, если вы об этом (я что-то нить разговора потерял )
Вот это верно! можно спорить о том, как потом работать - с функциями, классами, синглтонами. Но то что надо перейти на mysqli заодно еще и почитать про prepare - это точно
вот если бд этого форума коньки отбросит, как же он будет работать? или все таки будет экран ошибки? Экран ошибки это одно из состояний в которое может попасть сайт если его системы не работают.
Alex_pac пользователю пишем "на сайте возникла ошибка" ошибку пишем в лог и отправляем e-mail или sms
он выведет ошибку на экран, только если DEBUG_MODE = ON Возможна ситуация, когда таблицы может не существовать. Тогда, получив код ошибки 1146, я её создам и повторю запрос, вместо того, чтобы убивать скрипт.
под экраном ошибки я имел ввиду экран запудривания мозга юзеру как будто "проводятся технические работы, форум временно недоступен" а не прямой вывод ошибок.
вроде я уже близок к решению как тут уже выявили. Раз mysqli есть значит надо его использовать ибо будущее за ним вот первая наработка в виде синглтон класса MYSUBD slqi v 0.1 представляю пока еще сыроватую концепцию ООП интерфейса к бд MYSQL через mysqli подключение с использованием глобального синглтон класса PHP: <pre> <?php class mysql extends mysqli { static private $_instance = null; protected function __construct(){} static public function start(){ if (self::$_instance == null) { self::$_instance = new mysql(); @self::$_instance->connect('localhost','root','password','databaseName'); // подключение mysqli_connect_errno() and die ('<b>Ошибка базы данных MYSQL</b><hr>'.mysqli_connect_error()); // ошибки self::$_instance->set_charset('utf8'); // кодировка } return self::$_instance; } #normal class public function read($query) { #line возвращает первую строчку из запроса (массив одномерный числовой) return mysqli_fetch_row(self::$_instance->query($query)); } public function read_all($query){ #table возвращает полностью содержимое запроса (массив двумерный числовой) $res = self::$_instance->query($query); while ($row=mysqli_fetch_row($res)) { $ret[]=$row; } if (isset($ret)) { return $ret; } return false; } public function read_one($query) { #one возвращает первую ячейку из запроса (массив отсутвует) if ($ret=mysqli_fetch_row(self::$_instance->query($query))) { return $ret[0]; } return false; } } # end class $mysqli = mysql::start(); #$res = $mysqli->read_one('SELECT * FROM table WHERE id > 4'); #$res = $mysqli->read('SELECT * FROM table WHERE id > 4'); $res = $mysqli->read_all('SELECT * FROM table WHERE id > 4'); #$mysqli->query("UPDATE table SET row = 'value' WHERE id = 4"); if ($res) { print_r ($res); } else { print 'нет значений'; } 1) использование класса синглтон обеспечивает глобальность всех методов через конструкцию mysql::start()->query() и тп в ЛЮБОМ месте кода или файла 2) интутивное подключение к бд Класс подключается к бд только в случае его вызова. 3) параметры кодировки и подключения едины и прописаны внутри класса. 4) класс подчиняется всем методам и параметрам которые прописаны в стандарте mysqli классов 5) вшиты методы MYSQL_READ технологии извлечения данных, что позволяет увеличить чистоту и логичность кода.
еще надо один момент рассмотреть в mysqli есть такой метод как prepare или заготовленные запросы В их синтаксисе присутвуют знаки вопроса, соглано идее это позволяет безопаснейшим и бысрейшим образом составить запрос из переменных параметров однако на практике, если посмотреть на статью http://phpclub.ru/detail/article/mysqli получаем чрезвычайно избыточное число "телодвижений" при работе с такими запросами. так что же получается что prepare это шаг назад и лучше mysqli_real_escape_string пока ничего не придумано?
осталось рассказать еще человеку про pdo и у него через 3 дня появится новейший класс MYSUBDPDO v0.99 для работы с огромным числом субд
Alex_pac лучше mysqli_real_escape_string пока ничего не придумано? prepare - лучше mysqli_real_escape_string - проще =) старайся сам вырабатывать критерии ответа при формулировке вопроса. Лучше чем? В каких ситуациях? При достижении каких целей? - Тогда и ответы будут появляться сами собой.
Все пишут и пишут какую то хрень. А как решаете проблему работы с разными БД? Вот в http://framework.zend.com/manual/ru/zend.db.html это сделано очень хорошо.