MySQL Функции (PDO_MYSQL)
Введение
PDO_MYSQL является драйвером, который реализует PHP Data Objects (PDO) интерфейс для доступа из PHP к MySQL 3.x, 4.x и 5.x баз данных.
PDO_MYSQL будет воспользоваться родным подготовлен настоящее заявление в поддержку MySQL 4.1 и выше. Если вы используете старую версию MySQL клиентских библиотек, PDO будет подражать их для вас.
Предупреждение
Осторожно: Некоторые таблицы MySQL типов (хранение двигателей) не поддерживают транзакции. При написании кода транзакций базы данных с помощью таблицы типа, который не поддерживает транзакции, MySQL будет делать вид, что операция была начата успешно. Кроме того, любой DDL запросов, будет неявно совершить какое-либо незавершенные транзакции.
Предопределенные константы
Перечисленные ниже константы определены данным водитель, и будет доступна только, когда расширение не были либо компилируется в PHP или динамически загружено на этапе прогона. Кроме того, эти драйверы конкретных констант должно использоваться только если вы используете этот драйвер. Использование драйвера конкретных атрибутов с другой водитель может привести к неожиданным последствиям.PDO:: GetAttribute () может быть использована для получения PDO_ATTR_DRIVER_NAME атрибут для проверки водителя, если ваш код может работать с несколькими водителями.
- PDO:: MYSQL_ATTR_USE_BUFFERED_QUERY ( целое число )
- Если этот атрибут имеет значение TRUE на PDOStatement , драйвер MySQL будет использовать буфер версии MySQL API. Если вы пишете переносимый код, который Вы должны использовать PDOStatement:: fetchAll () вместо.Пример # 3 Принуждение запросов быть буфером в MySQL
<? PHPесли ( $ DB -> GetAttribute ( PDO :: ATTR_DRIVER_NAME ) == 'MySQL' ) { $ ЗЬтЬ = $ DB -> подготовить ( "SELECT * FROM Foo ' , массив ( PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY => истинный )); } {Другое умереть ( "мой приложение работает только с MySQL, я должен использовать \ $ зЬтЬ-> fetchAll () вместо" ); }?> - PDO:: MYSQL_ATTR_LOCAL_INFILE ( целое число )
- Включить LOAD LOCAL INFILE .Обратите внимание, эта константа может быть использована только в driver_options массива при построении новой базы данных ручки.
- PDO:: MYSQL_ATTR_INIT_COMMAND ( целое число )
- Команда для выполнения при подключении к серверу MySQL. Автоматически будет повторно выполнена при повторном подключении.Обратите внимание, эта константа может быть использована только в driver_options массива при построении новой базы данных ручки.
- PDO:: MYSQL_ATTR_READ_DEFAULT_FILE ( целое число )
- Читать опции из указанного файла опций, а не из my.cnf . Эта опция недоступна, если mysqlnd используется, потому что mysqlnd не читает файлы конфигурации MySQL.
- PDO:: MYSQL_ATTR_READ_DEFAULT_GROUP ( целое число )
- Читать опции из указанной группы из my.cnf или файла, указанного с MYSQL_READ_DEFAULT_FILE . Эта опция недоступна, если mysqlnd используется, потому что mysqlnd не читает файлы конфигурации MySQL.
- PDO:: MYSQL_ATTR_MAX_BUFFER_SIZE ( целое число )
- Максимальный размер буфера. По умолчанию 1 Мб. Эта константа не поддерживается при компиляции против mysqlnd.
- PDO:: MYSQL_ATTR_DIRECT_QUERY ( целое число )
- Выполнять прямые запросы, не следует использовать подготовленные заявления.
- PDO:: MYSQL_ATTR_FOUND_ROWS ( целое число )
- Вернуться количество найденных (соответствия) строк, а не число измененных строк.
- PDO:: MYSQL_ATTR_IGNORE_SPACE ( целое число )
- Разрешение пробелы после имен функций. Делает все имена функций зарезервированными словами.
- PDO:: MYSQL_ATTR_COMPRESS ( целое число )
- Включить сети связи сжатия. Это не поддерживается при компиляции против mysqlnd.
Настройка во время выполнения
Поведение этих функций зависит от установок в php.ini .
| Название | По умолчанию | Изменчивый |
|---|---|---|
| pdo_mysql.default_socket | "/ TMP / mysql.sock" | PHP_INI_SYSTEM |
| pdo_mysql.debug | NULL | PHP_INI_SYSTEM |
Вот краткое разъяснение конфигурационных директив.
- pdo_mysql.default_socket строку
- Устанавливает сокет Unix домена. Это значение может быть установлен во время компиляции, если домен гнездо находится в настройке.Эта директива является Unix только.
- pdo_mysql.debug булево
- Включает отладку PDO_MYSQL. Эта настройка доступна только при PDO_MYSQL составлен против mysqlnd и в PDO режиме отладки.
Содержание
- PDO_MYSQL DSN - Подключение к базам данных MySQL
rgagnon24 на Gmail точка ком 02-Jun-2010 4:06
Обратите внимание, что опция MySQL PDO:: MYSQL_ATTR_LOCAL_INFILE может быть установлено только на начальном строительство вашего объекта PDO.
Это не поддерживается PDO:: GetAttribute (), ни PDO:: SetAttribute () для MySQL объектов PDO.Дэви Defaud 22-апр-2009 07:30
Это способ заставить MySQL драйвер PDO использовать UTF-8 для связи:
<? PHP
$ PDO = новый PDO (
"MySQL: хост = хоста; = DBNAME defaultDbName" ,
"Имя пользователя" ,
"Пароль" ,
массив ( PDO :: MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" )
); ?>Брайан в diamondsea точка ком 25-июл-2008 06:26
SQLSTATE [HY000]: Общие ошибки: 2014 не может выполнять запросы в то время как другие небуферизованных запросы являются активными. ...
Потратив несколько часов пытаются отследить, почему мы были получаю сообщение об ошибке на новый сервер, после же код побежал штрафа на других серверах, мы обнаружили, что проблема, которую предстоит старых _client_ MySQL Библиотека работает на нашем веб-сервера, и последняя версия MySQL _server_ работает на окне сервера баз данных.
Модернизированный клиента MySQL на веб-сервер для текущей версии и проблема ушла.miller_kurt_e на Yahoo точка ком 20-июл-2008 09:03
SQLSTATE [HY000]: Общие ошибки: 2014 не может выполнять запросы в то время как другие небуферизованных запросы являются активными. ...
Это можно быть королевской боль, чтобы иметь дело с. Никогда не стек операторов для выполнения на одном дыхании. Никто никогда не упоминает эту возможность во всех должностей, которые я видел дело с этой ошибкой.
Этот пример является примером Zend Framework, но теория же.
Как и в:
<? PHP
$ SQL = <<<____ SQL CREATE TABLE IF NOT EXISTS `ticket_hist` (
`TID` Int (11) NOT NULL,
`Trqform` VARCHAR (40) NOT NULL,
`Trsform` VARCHAR (40) NOT NULL,
`` Tgen DateTime NOT NULL,
`` Tterm DateTime,
`` Tstatus TINYINT (1) NOT NULL
) ENGINE = архивный комментарий = 'билет архива;
CREATE TABLE IF NOT EXISTS `request_hist` (
`` Rqid Int (11) NOT NULL,
`` Rqtid Int (11) NOT NULL,
`` Rqsid Int (11) NOT NULL,
`` Rqdate DateTime NOT NULL,
`` Rqcode TINYINT (1) NOT NULL,
`` Rssid Int (11) NOT NULL,
`` Rsdate DateTime,
`` Rscode TINYINT (1)
) ENGINE = архивный комментарий = 'запрос архива;
CREATE TABLE IF NOT EXISTS `relay_hist` (
`` Rqid Int (5) NOT NULL,
`Sdesc` VARCHAR (40) NOT NULL,
`Rqemail` VARCHAR (40) NOT NULL,
`SID` Int (11) NOT NULL,
`` Rlsid Int (11) NOT NULL,
`Dcode` VARCHAR (5) NOT NULL
) ENGINE = архивный комментарий = 'реле архива; ____SQL; $ Результат = $ это -> БД -> getConnection () -> Exec ( $ SQL ); ?>
Это будет работать нормально, но PDO откажутся с "небуферизованных" ошибку, если вы будете следовать этому с другой запрос.
Вместо этого сделать:
<? PHP
$ SQL = <<<____ SQL CREATE TABLE IF NOT EXISTS `ticket_hist` (
`TID` Int (11) NOT NULL,
`Trqform` VARCHAR (40) NOT NULL,
`Trsform` VARCHAR (40) NOT NULL,
`` Tgen DateTime NOT NULL,
`` Tterm DateTime,
`` Tstatus TINYINT (1) NOT NULL
) ENGINE = архивный комментарий = 'билет архива; ____SQL; $ Результат = $ это -> БД -> getConnection () -> Exec ( $ SQL );
$ SQL = <<<____ SQL CREATE TABLE IF NOT EXISTS `request_hist` (
`` Rqid Int (11) NOT NULL,
`` Rqtid Int (11) NOT NULL,
`` Rqsid Int (11) NOT NULL,
`` Rqdate DateTime NOT NULL,
`` Rqcode TINYINT (1) NOT NULL,
`` Rssid Int (11) NOT NULL,
`` Rsdate DateTime,
`` Rscode TINYINT (1)
) ENGINE = архивный комментарий = 'запрос архива; ____SQL; $ Результат = $ это -> БД -> getConnection () -> Exec ( $ SQL );
$ SQL = <<<____ SQL CREATE TABLE IF NOT EXISTS `relay_hist` (
`` Rqid Int (5) NOT NULL,
`Sdesc` VARCHAR (40) NOT NULL,
`Rqemail` VARCHAR (40) NOT NULL,
`SID` Int (11) NOT NULL,
`` Rlsid Int (11) NOT NULL,
`Dcode` VARCHAR (5) NOT NULL
) ENGINE = архивный комментарий = 'реле архива; ____SQL; $ Результат = $ это -> БД -> getConnection () -> Exec ( $ SQL ); ?>
Разделочные его в отдельных запросов исправления проблемы.practicegoodtheory на Gmail точка ком 19-Jun-2008 6:56
В Windows с Apache, он не будет загружен php_pdo_mysql.dll пока я не положил libmysql.dll в DLL путь Apache (например, Apache / бен)rmottey на Gmail точка ком 09-Jan-2008 11:51
Я получаю ошибку ниже при выполнении нескольких запросов в пределах одной страницы.
Настройка атрибута ниже, казалось, не работа для меня.
Так на основе предыдущего примера я initilizing мой зЬтЬ переменной на каждый запрос и получить все в массив. , Кажется, работает для меня.
Ошибка:
PDO Ошибка 1,1: Array ([0] => XXX [1] => YYY [2] => потеряли связь с MySQL сервером при запросе)
Исправлена ошибка:
(PDO:: SetAttribute ("PDO:: MYSQL_ATTR_USE_BUFFERED_QUERY", True);)
<?
попробуйте {
$ DBH = новый PDO ('MySQL: хост = XXX; порт = XXX; DBNAME = XXX "," XXX "," XXX ", массив (PDO:: ATTR_PERSISTENT => ложные));
$ = $ ЗЬтЬ DBH-> подготовить ("CALL ()"); GetName
/ / Вызов хранимой процедуры
$ ЗЬтЬ-> Execute ();
/ / Извлечение всех строк в массиве.
$ Строки = $ зЬтЬ-> fetchAll ();
Еогеасп ($ строк при $ RS)
{
$ ID = $ ["ID"] RS;
}
/ / Initilise заявление
отключенное ($ зЬтЬ);
$ = $ ЗЬтЬ DBH-> подготовить ("вызов secondprocedure (?);");
$ ЗЬтЬ-> bindValue (1, $ ID);
если (! $ зЬтЬ-> Выполнить ())
{
Эхо "ПДО Ошибка 1,1: \ п";
print_r ($ зЬтЬ-> ERRORINFO ());
выхода;
}
отключенное ($ зЬтЬ);
} Поймать (PDOException $ E) {
печати "Ошибка!". $ E-> GetMessage (). "<br/>";
умереть ();
}
?>Марти в excudo Dot Net 17-Oct-2007 12:13
Дейви пишет:
> Чтобы использовать "PDO:: MYSQL_ATTR_USE_BUFFERED_QUERY" Вы должны назвать
> PDO:: SetAttribute ("PDO:: MYSQL_ATTR_USE_BUFFERED_QUERY", True);
>
> Он не будет работать, когда перешел в PDO:: подготовить ()
>
> - Дэви
Почти правильно. Она должна быть:
PDO:: SetAttribute (PDO:: MYSQL_ATTR_USE_BUFFERED_QUERY, TRUE);
так, без кавычек.
в противном случае он все равно не будет работать:)bratwizard на Yahoo точка ком 22-Sep-2007 7:59
> Конрадс точка smelkovs на Gmail точка ком
> 18-июля-2007 3:39
> Примечание для стремятся:
>> Существует никоим образом, как получить возвращается количество строк из выполненных подготовленное заявление без выборки строк.
Конечно есть, просто сделать что-то вроде этого:
если ($ STH = $ PDO-> подготовить ($ SQL)) {
$ STH-> Выполнить ($ значения);
$ STH-> Fetch ();
/ / Получаем количество строк в результирующем наборе
если ($ = $ sth_rc этом-> getDataset () -> запрос ("SELECT FOUND_ROWS ()')) {
$ = $ Количество_строк sth_rc-> fetchColumn (0);
}
}Конрадс точка smelkovs на Gmail точка ком 18-июл-2007 10:39
Примечание для стремятся:
Существует никоим образом, как получить вернулся количество строк из выполненных подготовленное заявление без выборки строк.Дейви на PHP Dot Net 06-Jun-2007 08:46
Для использования "PDO:: MYSQL_ATTR_USE_BUFFERED_QUERY" Вы должны назвать
PDO:: SetAttribute ("PDO:: MYSQL_ATTR_USE_BUFFERED_QUERY", True);
Он не будет работать, когда перешел в PDO:: подготовить ()
- Дэвиdibakar на Талаш Dot Net 12-Sep-2006 06:31
PDO гораздо лучший вариант для вызова процедур, представлений или триггеров MySQL 5.x версии от PHP вместо использования MySQLi расширения. Ниже приведен простой сценарий демо, которые могут помочь никому о том, как вызов и использовать MySQL процедур, с помощью PHP
попробуйте {
$ DBH = новый PDO ('MySQL: хост = XXX; порт = XXX; DBNAME = XXX "," XXX "," XXX ", массив (PDO:: ATTR_PERSISTENT => ложные));
$ = $ ЗЬтЬ DBH-> подготовить ("CALL ()"); GetName
/ / Вызов хранимой процедуры
$ ЗЬтЬ-> Execute ();
Эхо "<B> вывода ...</ B> <BR>";
а ($ RS = $ зЬтЬ-> Fetch (PDO:: FETCH_OBJ)) {
Эхо "вывод:" $ RS-имя> "<BR>";..
}
Эхо "<BR> <B>" даты ("R ")."</ B>".
} Поймать (PDOException $ E) {
печати "Ошибка!". $ E-> GetMessage (). "<br/>";
умереть ();
}
Комментариев нет:
Отправить комментарий