Вот с запонителями так называемыми вы, брацы, замудрили конечно... Это называеться "Подготовленное выражение" и в MySQLi это уже есть, так что изобретать велосипед не обязательно. Если готовить про INSERT'ы, то идиальный вариант, ИМХО, это PHP: <?php class db { /* class code here */ final public function insert($table, array $data){ $fields = $field_data = array(); foreach ($data as $key => $value){ $fields[] = '`'.$key.'`'; if (is_numeric($value)){ $field_data[] = (int)$value; }else{ $field_data = '"'.mysql_escape_string(trim($value)).'"'; } } return $this->query('INSERT INTO `'.$table.'` ('.implode(',', $fields).') VALUES('.implode(',', $field_data).')'); } } $data = array('field1' => 'data', 'field2' => 2, 'filed3' => 'somevalue'); $db->insert('table', $data); ?>
dark-demon Ну так добавте если надо, что вы к мелочам придераетесь. Я не готовый класс выложил же. по поводу final - RTFM? Что бы метод нельзя было переопределить при наследовании.
Psih, что такое final я знаю я не понимаю зачем он тут. что плохого в том, что дочерний класс его переопределит?
начал там http://php.ru/forum/viewtopic.php?p=55294#55294 +1 при добавлении поля в БД я не должен переписывать ВСЕ. Реализация $res=fetch( for ($i=0;$i<count($res);$i++) { list ($f1,$f2,...) = $res[$i]; } кажется удобной при написании и требует многовато времени на переделку через 2 месяца. Сравнил и убедился что while ничем не хуже. Как правило у меня с while код получается менее громоздким, чем у чрезмерных любителей массивов. инсерты вставляю руками, тоже слишком много затрат будет на унификацию имхо. Это потребуется если писать платформо-независимый код. Не понял зачем разделять строчки и массивы. Сколько будет строчек - одна или много - надо обязательно представлять еще при написании запроса. Еще раз по требованиям к классу: У кого другие? 3) стоит на первом месте?
ты используешь магические кавычки или каждый передаваемый параметр подаёшь через вызов экранирующей функции?
Что нибудь по теме есть или опять "унитаз v/s вертолёт" ? Сколько будет строчек известно (в гостевухе например много, на то она и гостевуха чтоб постов было много) однако не известно на данный момент в гостевухе один пост или 10000000000000000
я не гоню в базу напрямую из Поста. обработка ввода идет вне функционала бд. хотя функция прогнать все через экран используется частенько.
Когда ты хоть слово внятно скажешь, будет по теме. Абстракция от чего? От типа бд или чего-то еще? Какие требования у тебя? унифицировать ввод и вывод? за счет написания for( вместо while($row=mysql_fetch_assoc( ? Тебе надо или where uid=".$uid или limit 1 или limit ".$from.", ".$to во всех случаях кто пишет должен понимать сколько там строчек. Иначе гнать его надо.
вот это плохо. экранирование должно производиться перед передчей данных. перед передачей в субд - одно экранирование. перед выводом в браузер - другое. перед посылкой мыла - третее. фактически твоё решение ничем от магических кавычек не отличается.
Исключить из скриптов танцы с бубном типа PHP: <?php // // (c) phpbb.com // $sql = "SELECT c.cat_id, c.cat_title, c.cat_order FROM " . CATEGORIES_TABLE . " c ORDER BY c.cat_order"; if( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql); } $category_rows = array(); while ($row = $db->sql_fetchrow($result)) { $category_rows[] = $row; } $db->sql_freeresult($result); ?> и заменить их на PHP: <?php $category_rows = $mysql->rowset_query("SELECT c.cat_id, c.cat_title, c.cat_order FROM " . CATEGORIES_TABLE . " c ORDER BY c.cat_order"); ?>
нафига? тут их надо уже обрабатывать и вставлять в форму, а не 10 раз перевертывать массивы. это должно обрабатываться в классе, да. а замена на себя не оправдывает.