понедельник, 2 мая 2011 г.

php. Работа с БД

Работа с БД



Стандартная библиотека MySQL

Кодировка

когда вместо русских букв отображаются ????? ?? ????????, может помочь это:

mysql_query( "SET character_set_client = cp1251;" );
mysql_query( "SET character_set_connection = cp1251;" );
mysql_query( "SET character_set_results = cp1251;" );

ставиться сразу после подключения к БД.


PDO

Класс для унифицированной работы с базами данных.
http://ru2.php.net/pdo

Создать курсор БД

$cursor = new PDO( sprintf( "mysql:host=%s;dbname=%s",
    Config::$dbHost, Config::$dbName),
    Config::$dbUser, Config::$dbPass);

foreach ($cursor->query("select 1") as $row){
    print_r( $row );
}
Параметры соединения указываеются четвёртым аргументом:
$dbh = new PDO($dbtype.':host='.$dbhost.';dbname='.$dbname, $dbuser, $dbpass, array(PDO::ATTR_PERSISTENT => true));

Выполнение запросов

Для выполнения запросов есть два метода: prepare и query

            $q = $this->db->prepare( "
insert into advert ( advert_nm, advert_text, homepage, group_id )
values (:title, :text, :homepage, :groupId )
" );
            $q->bindParam(':title', $_POST["adv_title"], PDO::PARAM_STR, 255 ); # есть ещё PDO::PARAM_INT
            $q->bindParam(':text', $_POST["adv_text"], PDO::PARAM_STR, 1024 );
            $q->bindParam(':homepage', $_POST["home_page"], PDO::PARAM_STR, 255 );
            $q->bindValue(':groupId', 1, PDO::PARAM_INT );
            $q->execute();  # после выполнения select можно получить данные через $q->fetch(), fetchall(), fetchObject(), fetchColumn()
                                    ## после выполнения insert -> $this->db->lastInsertId();
            $a = $q->errorInfo();
            if ($a[0]=="00000"){
                header( "Location: /do/" );
            }
Если нужно выполнить несколько запросов подряд, то могут возникнуть запарки: на некоторых серверах PDO может иметь только одно подготовленное выражение.
Прежде чем создавать очередной запрос, нужно удалить (unset) старое подготовленное выражение.

fetchObject

fetchObject возвращает объект типа stdClass. Чтобы получить данные из него, надо обращаться с ним как с объектом:
$res = $q->fetchObject();
print $res->column_nm;

dbSimple

Для начала

http://dklab.ru/lib/DbSimple/
dbSimple не обновлялся с 2006(?) года.
В PHP5 появился класс PDO для работы с БД.

Интерфейс библиотеки (кратко)

Полное описание интерфейса см. в подробной документации.

mixed connect(string $dsn) Соединение с указанной СУБД, используя DSN. mixed select(string $query [,$arg1...]) Выборка двумерного массива (список строк). hash selectRow(string $query [,$arg1...]) Выборка однострочного результата запроса (одна строка). array selectCol(string $query [,$arg1...]) Выборка одноколоночного результата запроса (один столбец). scalar selectCell(string $query [,$arg1...]) Выборка скалярного результата запроса (одна ячейка). mixed selectPage(int &$total, string $query [,$arg1...) Выборка ограниченного двумерного массива с занесением общего числа записей в переменную. mixed query(string $query [,$arg1...]) Вызов не-SELECT запроса; для автоинкрементных полей в INSERT-запросах возвращает ID вставленной записи. mixed transaction([mixed $parameters]) Запускает новую транзакцию. mixed commit() / mixed rollback() Подтверждает/отменяет текущую транзакцию.

Комментариев нет:

Отправить комментарий