Дон Карлос (kastaneda) wrote,
Недавно я писал про то, что терпеть не могу Smarty. Так вот, в продолжение темы: я весьма прохладно отношусь к PEAR::DB и ADOdb. Они монстрообразны. Для простых веб-приложений я пользуюсь очень простой «обёрткой» к штатным функциям вида foosql_query(), которая заметно сокращает объём кода.

Примерно вот так:

<?php

define
('SQL_CELL',  2);
define('SQL_ROW',   1);
define('SQL_COL',  -1);
define('SQL_HASH', -2);

function 
sql($query,$pack_level=0) {
    
$res=mysql_query($query);
    if( 
is_resource($res) ) {
        
$data=array();
        if( 
$pack_level==SQL_HASH )
            while( list(
$key,$val)=mysql_fetch_row($res) ) $data[$key]=$val;
        elseif( 
$pack_level==SQL_COL )
            while( 
$row=mysql_fetch_row($res) ) $data[]=end($row);
        else {
            while( 
$row=mysql_fetch_assoc($res) ) $data[]=$row;
            while( 
$pack_level-- && count($data) ) $data=end($data);
        }
        return 
$data;
    }
}

?>

Этого вполне достаточно, чтобы писать простые веб-приложения. Для сложных веб-приложений потребуется высокоуровневая абстракция. А для новостных лент, гостевых книг и прочей мелочёвки вполне достаточно одной функции. Не верите?
$result = sql('SELECT * FROM table');
возвращает массив массивов (массив строк результата):
array(
    array('id'=>1, 'name'=>'Foo'),
    array('id'=>2, 'name'=>'Bar') )


$result = sql('SELECT * FROM table WHERE id=1', SQL_ROW);
возвращает ассоциативный массив (одна строчка результата):
array( 'id'=>1, 'name'=>'Foo' )

$result = sql('SELECT name FROM table WHERE id=1', SQL_CELL);
возвращает скалярное значение: 'Foo'

$result = sql('SELECT name FROM table', SQL_COL);
возвращает массив (столбец результатов):
array( 'Foo', 'Bar' )

$result = sql('SELECT id, name FROM table', SQL_HASH);
возвращает ассоциативный массив с ключами из id и значениями table:
array( 1=>'Foo', 2=>'Bar' )
(порядок переменных в SELECT'е важен)

sql('DELETE FROM table WHERE id=10');
sql('UPDATE table SET enabled=0 WHERE publication_date<NOW()');
просто выполняет запрос
Вот так. А морали сегодня не будет, мне её надоело рассказывать.
Tags: must, q-revo, webdev
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded  

  • 4 comments