Sunteți pe pagina 1din 100

Introduccin La extensin Objetos de Datos de PHP (PDO por sus sigls en ingls) define un interfaz ligera para poder

acceder a bases de datos en PHP. Cada controlador de bases de datos que implemente la interfaz PDO puede exponer caractersticas especficas de la base de datos, como las funciones habituales de la extensin. Obsrvese que no se puede realizar ninguna de las funciones de la bases de datos utilizando la extensin PDO por s misma; se debe utilizar un controlador de PDO especfico de la base de datos para tener acceso a un servidor de bases de datos. PDO proporciona una capa de abstraccin de acceso a datos, lo que significa que, independientemente de la base de datos que se est utilizando, se usan las mismas funciones para realizar consultas y obtener datos. PDO noproporciona una abstraccin de bases de datos; no reescribe SQL ni emula caractersticas ausentes. Se debera usar una capa de abstraccin totalmente desarrollada si fuera necesaria tal capacidad. PDO viene con PHP 5.1, y est disponible como una extensin PECL para PHP 5.0; PDO requiere las caractersticas nuevas de OO del ncleo de PHP 5, por lo que no se ejecutar con versiones anteriores de PHP. Constantes predefinidas Estas constantes estn definidas por esta extensin y estarn disponibles slo cuando la extensin haya sido compilada con PHP, o bien sea cargada dinmicamente en ejecucin. Advertencia PDO utiliza constantes de clase desde PHP 5.1. Las versiones anteriores usan constantes globales bajo la forma PDO_PARAM_BOOL. PDO::PARAM_BOOL (integer) Representa un tipo de dato booleano. PDO::PARAM_NULL (integer) Representa el tipo de dato NULL de SQL. PDO::PARAM_INT (integer) Representa el tipo de dato INTEGER de SQL . PDO::PARAM_STR (integer) Representa el tipo de dato CHAR, VARCHAR de SQL, u otro tipo de datos de cadena. PDO::PARAM_LOB (integer) Representa el tipo de dato LOB (objeto grande) de SQL. PDO::PARAM_STMT (integer) Representa un tipo de conjunto de registros. No est admitido actualmente por ningn controlador. PDO::PARAM_INPUT_OUTPUT (integer)

Especifica que el parmetro es de entrada/salida (INOUT) para un procedimiento almacenado. Se debe realizar un OR a nivel de bits con un tipo de datos PDO::PARAM_* explcito. PDO::FETCH_LAZY (integer) Especifica que el mtodo de obtencin debe devolver cada fila como un objeto con los nombres de las variables que se corresponden a los nombres de las columnas devueltos en el conjunto de resultados.PDO::FETCH_LAZY crea los nombres de las variables del objeto a medida que se acceden a ellas. No es vlida dentro de PDOStatement::fetchAll(). PDO::FETCH_ASSOC (integer) Especifica que el mtodo de obtencin debe devolver cada fila como un array indexado por los nombres de las columnas devueltos en el correspondiente conjunto de resultados. Si ste contiene mltiples columnas con el mismo nombre, PDO::FETCH_ASSOC devuelve un nico valor por nombre de columna. PDO::FETCH_NAMED (integer) Especifica que el mtodo de obtencin debe devolver cada fila como un array indexado por los nombres de las columnas devueltos en el correspondiente conjunto de resultados. Si ste contiene mltiples columnas con el mismo nombre, PDO::FETCH_NAMED devuelve un array de valores por nombre de columna. PDO::FETCH_NUM (integer) Especifica que el mtodo de obtencin debe devolver cada fila como un array indexado por los nmeros de columna devueltos en el correspondiente conjunto de resultados, comenzando por la columna 0. PDO::FETCH_BOTH (integer) Especifica que el mtodo de obtencin debe devolver cada fila como un array indexado tanto por los nombres como por los nmeros de las columnas devueltos en el correspondiente conjunto de resultados, comenzando por la columna 0. PDO::FETCH_OBJ (integer) Especifica que el mtodo de obtencin debe devolver cada fila como un objeto con los nombres de sus propiedades correspondientes a los nombres de las columnas devueltos en el conjunto de resultados. PDO::FETCH_BOUND (integer) Especifica que el mtodo de obtencin debe devolver TRUE y asignar los valores de las columnas del conjunto de resultados a las variables de PHP a las cuales estn vinculadas con los mtodosPDOStatement::bindParam() o PDOStatement::bindColumn(). PDO::FETCH_COLUMN (integer)

Especifica que el mtodo de obtencin debe devolver una nica columna solicitada de la siguiente fila del conjunto de resultados. PDO::FETCH_CLASS (integer) Especifica que el mtodo de obtencin debe devolver una nueva instancia de la clase solicitada, haciendo corresponder las columnas con los nombres de las propiedades de la clase. Nota: El mtodo mgico __set() se invoca si la propiedad no existe en la clase solicitada. PDO::FETCH_INTO (integer) Especifica que el mtodo de obtencion debe actualizar una instancia existente de la clase solicitada, haciendo corresponder las columnas con los nombres de las propiedades de la clase. PDO::FETCH_FUNC (integer) Permite personalizar completamente la forma en que los datos son tratados al vuelo (nicamente vlida dentro de PDOStatement::fetchAll()). PDO::FETCH_GROUP (integer) Grupo devuelto segn valores. Usualmente combinada con PDO::FETCH_COLUMN o PDO::FETCH_KEY_PAIR. PDO::FETCH_UNIQUE (integer) Obtener solamente los valores nicos. PDO::FETCH_KEY_PAIR (integer) Obtener un resultado de dos columnas como un array donde la primera columna es la clave y la segunda el valor. Disponible desde PHP 5.2.3. PDO::FETCH_CLASSTYPE (integer) Determinar el nombre de la clase desde el valor de la primera columna. PDO::FETCH_SERIALIZE (integer) Igual que PDO::FETCH_INTO salvo que el objeto es proporcionado como una cadena serializada. Disponible desde PHP 5.1.0. PDO::FETCH_PROPS_LATE (integer) Disponible desde PHP 5.2.0 PDO::ATTR_AUTOCOMMIT (integer) Si este valor es FALSE, PDO intenta descativar la autoconsigna de forma que la conexin comience una transaccin. PDO::ATTR_PREFETCH (integer) Establecer el tamao de la precarga permite obtener un equilibrio entre rapidez y uso de memoria para la aplicacin. No todas las combinaciones base de datos/controlador

admiten establecer el tamao de la precarga. Un valor ms grande de precarga da como resultado un aumento del rendimiento a costa de un mayor uso de memoria. PDO::ATTR_TIMEOUT (integer) Establece el valor del tiempo de espera, en segundos, para las comunicaciones con la base de datos. PDO::ATTR_ERRMODE (integer) Vase la seccin Errores y su manejo para obtener ms informacin sobre este atributo. PDO::ATTR_SERVER_VERSION (integer) Este es un atributo de slo lectura; devolver informacin sobre la versin del servidor de bases de datos al que est conectado PDO. PDO::ATTR_CLIENT_VERSION (integer) Este es un atributo de slo lectura; devolver informacin sobre la versin de las bibliotecas cliente que el controlador de PDO est usando. PDO::ATTR_SERVER_INFO (integer) Este es un atributo de slo lectura; devolver alguna metainformacin sobre el servidor de bases de datos al que est conectado PDO. PDO::ATTR_CONNECTION_STATUS (integer) PDO::ATTR_CASE (integer) Forzar a los nombres de las columnas al uso de maysculas/minsculas especificado por las constantesPDO::CASE_*. PDO::ATTR_CURSOR_NAME (integer) Obtener o establecer el nombre a usar para un cursor. Es ms til cuando se utilizan cursores desplazables y actualizacioines posicionadas. PDO::ATTR_CURSOR (integer) Selecciona el tipo de cursor. PDO actualmente admite PDO::CURSOR_FWDONLY y PDO::CURSOR_SCROLL. Case a PDO::CURSOR_FWDONLY a menos que sepa que necesite un cursor desplazable. PDO::ATTR_DRIVER_NAME (string) Devuelve el nombre del controlador. Ejemplo #1 Usar PDO::ATTR_DRIVER_NAME <?php if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') { echo "Ejecutndose sobre mysql; hacer algo especfico de mysql aqu\n"; } ?> PDO::ATTR_ORACLE_NULLS (integer)

Convertir cadenas vacas a valores NULL de SQL en la obtencin de datos. PDO::ATTR_PERSISTENT (integer) Solicitar una conexin persistente, en vez de crear una nueva conexin. Vase Conexiones y su administracin para obtener ms informacin sobre este atributo. PDO::ATTR_STATEMENT_CLASS (integer) PDO::ATTR_FETCH_CATALOG_NAMES (integer) Anteponer el nombre del catlogo contenido a cada nombre de columna devuelto en el conjunto de resultados. El nombre del catlogo y el nombre de columna estn separados por el carcter punto (.). El soporte de este atributo es a nivel del controlador; podra no estar admitido por el controlador que usted utilice. PDO::ATTR_FETCH_TABLE_NAMES (integer) Anteponer el nombre de la tabla contenida a cada nombre de columna devuelto en el conjunto de resultados. El nombre de la tabla y el nombre de columna estn separados por el carcter punto (.). El soporte de este atributo es a nivel del controlador; podra no estar admitido por el controlador que usted utilice. PDO::ATTR_STRINGIFY_FETCHES (integer) PDO::ATTR_MAX_COLUMN_LEN (integer) PDO::ATTR_DEFAULT_FETCH_MODE (integer) Disponible desde PHP 5.2.0. PDO::ATTR_EMULATE_PREPARES (integer) Disponible desde PHP 5.1.3. PDO::ERRMODE_SILENT (integer) No emitir ningn error o excepcin si ocurrieran. El desarrollador es responsable de comprobar explcitamente los errores. Este es el modo predeterminado. Vase Errores y su manejo para obtener ms informacin sobre este atributo. PDO::ERRMODE_WARNING (integer) Emitir un mensaje de tipo E_WARNING de PHP si ocurre algn error. Vase Errores y su manejo para obtener ms informacin sobre este atributo. PDO::ERRMODE_EXCEPTION (integer) Lanzar una excepcin de tipo PDOException si ocurre algn error. Vase Errores y su manejo para obtener ms informacin sobre este atributo. PDO::CASE_NATURAL (integer) Dejar los nombres de las columnas tal como son devueltas por el controlador de la base de datos. PDO::CASE_LOWER (integer) Forzar a los nombres de las columnas a estar en minsculas.

PDO::CASE_UPPER (integer) Fuerza a los nombres de las columnas a estar en maysculas. PDO::NULL_NATURAL (integer) PDO::NULL_EMPTY_STRING (integer) PDO::NULL_TO_STRING (integer) PDO::FETCH_ORI_NEXT (integer) Obtener la siguiente fila del conjunto de resultados. nicamente vlida para cursores desplazables. PDO::FETCH_ORI_PRIOR (integer) Obtener la fila anterior del conjunto de resultados. nicamente vlida para cursores desplazables. PDO::FETCH_ORI_FIRST (integer) Obtener la primera fila del conjunto de resultados. nicamente vlida para cursores desplazables. PDO::FETCH_ORI_LAST (integer) Obtener la ltima fila del conjunto de resultados. nicamente vlida para cursores desplazables. PDO::FETCH_ORI_ABS (integer) Obtener la fila solicitada mediante el nmero de fila del conjunto de resultados. nicamente vlida para cursores desplazables. PDO::FETCH_ORI_REL (integer) Obtener la fila solicitada mediante la posicin relativa de la posicin actual del cursor del conjunto de resultados. nicamente vlida para cursores desplazables. PDO::CURSOR_FWDONLY (integer) Crear un objeto PDOStatement con un cursor de slo avance. Este es la eleccin del cursor predeterminada, ya que es el patrn de acceso a datos ms rpido y comn en PHP. PDO::CURSOR_SCROLL (integer) Crear un objeto PDOStatement con un cursor desplazable. Pase las constantes PDO::FETCH_ORI_*para controlar las filas obtenidas del conjunto de resultados. PDO::ERR_NONE (string) Corresponde al SQLSTATE '00000', el cual significa que la sentencia SQL fue ejecutada con xito, sin errores ni advertencias. Esta constante sirve para la comprobacin cmoda de PDO::errorCode() oPDOStatement::errorCode() para determinar si ha ocurrido algn error. En cualquier caso, usualmente se sabr si este

es el caso examinando el cdigo devuelto por el mtodo que provoc la condicin de error. PDO::PARAM_EVT_ALLOC (integer) Evento de asignacin PDO::PARAM_EVT_FREE (integer) Evento de desasigncacin PDO::PARAM_EVT_EXEC_PRE (integer) Evento provocado antes de la ejecucin de una sentencia preparada. PDO::PARAM_EVT_EXEC_POST (integer) Evento provocado despus de la ejecucin de una sentencia preparada. PDO::PARAM_EVT_FETCH_PRE (integer) Evento provocado antes de la obtencin de un resultado de un conjunto de resultados. PDO::PARAM_EVT_FETCH_POST (integer) Evento provocado despus de la obtencin de un resultado de un conjunto de resultados. PDO::PARAM_EVT_NORMALIZE (integer) Evento provocado durante el resistro de un parmetro vinculado, permitiendo al controlador normalizar el nombre del parmetro.

add a noteUser Contributed Notes Constantes predefinidas - [2 notes] up down 0 sam at xnet dot tk 5 hours ago It should be noted that PDO::FETCH_CLASS will call the constructor *after* setting the values (or calling __set). up down 0 Axeia 2 years ago If you're reading in information from an array to use in a prepared statement you may find the following function useful. <?php

function getPDOConstantType( $var ) { if( is_int( $var ) ) return PDO::PARAM_INT; if( is_bool( $var ) ) return PDO::PARAM_BOOL; if( is_null( $var ) ) return PDO::PARAM_NULL; //Default return PDO::PARAM_STR; } ?>

Conexiones y su administracin Las conexiones se establecen creando instancias de la clase base PDO. No importa el controlador que se utilice; siempre se usar el nombre de la clase PDO. El constructor acepta parmetros para especificar el origen de datos (conocido como DSN) y, opcionalmente, el nombre de usuario y la contrasea (si la hubiera). Ejemplo #1 Conectarse a MySQL <?php $gbd = new PDO('mysql:host=localhost;dbname=test', $usuario, $contrasea); ?> Si hubieran errores de conexin, se lanzar un objeto de tipo PDOException. Se puede capturar la excepcin si fuera necesario manejar la condicin del error, o se podra optar por dejarla en manos de un gestor de excepciones global de una aplicacin configurado mediante set_exception_handler(). Ejemplo #2 Manejo de errores de conexin <?php try { $gbd = new PDO('mysql:host=localhost;dbname=test', $usuario, $contrasea); foreach($gbd->query('SELECT * from FOO') as $fila) { print_r($fila); } $gbd = null;

} catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } ?> Advertencia Si la aplicacin no captura la excepcin lanzada por el constructor de PDO, la accin predeterminada que toma el motor zend es la de finalizar el script y mostrar informacin de rastreo. Esta informacin probablemente revelar todos los detalles de la conexin a la base de datos, incluyendo el nombre de usuario y la contrasea. Es su responsabilidad capturar esta excepcin, ya sea explcitamente (con una sentenciacatch) o implcitamente por medio de set_exception_handler(). Una vez realizada con xito una conexin a la base de datos, ser devuelta una instancia de la clase PDO al script. La conexin permanecer activa durante el tiempo de vida del objeto PDO. Para cerrar la conexin, es necesario destruir el objeto asegurndose de que todas las referencias a l existentes sean eliminadas (esto se puede hacer asignando NULL a la variable que contiene el objeto). Si no se realiza explcitamente, PHP cerrar automticamente la conexin cuando el script finalice. Ejemplo #3 Cerrar una conexin <?php $gbd = new PDO('mysql:host=localhost;dbname=test', $usuario, $contrasea); // Use la conexin aqu

// ya se ha terminado; la cerramos $gbd = null; ?> Muchas aplicaciones web se beneficiarn del uso de conexiones persistentes a servidores de bases de datos. Las conexiones persistentes no son cerradas al final del script, sino que son almacenadas en cach y reutilizadas cuando otro script solicite una conexin que use las mismas credenciales. La cach de conexiones persistentes permite evitar la carga adicional de establecer una nueva conexin cada vez que un script necesite comunicarse con la base de datos, dando como resultado una aplicacin web ms rpida. Ejemplo #4 Conexiones persistentes <?php $gbd = new PDO('mysql:host=localhost;dbname=test', $usuario, $contrasea, array( PDO::ATTR_PERSISTENT => true

)); ?> Nota: Si se quiere usar conexiones persistentes, se deber establecer PDO::ATTR_PERSISTENT en las opciones del array del controlador pasado al constructor de PDO. Si este atributo se establece con PDO::setAttribute()despus de la instanciacin del objeto, el controlador no utilizar conexiones persistentes. Nota: Si se usa el controlador PDO y las bibliotecas ODBC admiten el agrupamiento de conexiones ODBC (unixODBC y Windows lo hacen; podran haber ms), se recomienda no utilizar las conexiones persistentes de PDO, y, en su lugar, dejar el almacenamiento en cach de conexiones a la capa del agrupamiento de conexiones de ODBC. El agrupamiento de conexiones de ODBC se comparte con otros mdulos en el proceso; si se le indica a PDO que almacene en cach la conexin, entonces dicha conexin nunca ser devuelta al agrupamiento de conexiones de ODBC, dando como resultado la creacin de conexiones adicionales para servir a los dems mdulos.

Transacciones y 'auto-commit'

Constantes predefinidas

[edit] Last updated: Fri, 25 Jan 2013 add a noteUser Contributed Notes Conexiones y su administracin - [6 notes] up down 2 jak dot spalding at gmail dot com 1 year ago Just thought I'd add in and give an explanation as to why you need to use 127.0.0.1 if you have a different port number. The mysql libraries will automatically use Unix sockets if the host of "localhost" is used. To force TCP/IP you need to set an IP address. up down 1

neville at whitespacers dot com 3 years ago To avoid exposing your connection details should you fail to remember to catch any exception thrown by the PDO constructor you can use the following class to implicitly change the exception handler temporarily. <?php Class SafePDO extends PDO { public static function exception_handler($exception) { // Output the exception details die('Uncaught exception: ', $exception->getMessage()); } public function __construct($dsn, $username='', $password='', $driver_options=array()) { // Temporarily change the PHP exception handler while we . . . set_exception_handler(array(__CLASS__, 'exception_handler')); // . . . create a PDO object parent::__construct($dsn, $username, $password, $driver_options); // Change the exception handler back to whatever it was before restore_exception_handler(); } } // Connect to the database with defined constants $dbh = new SafePDO(PDO_DSN, PDO_USER, PDO_PASSWORD); ?> up down 0

alvaro at demogracia dot com 1 year ago On connection errors, the PDO constructor seems to do two things no matter your PDO::ATTR_ERRMODE setting: 1. Trigger a warning 2. Throw a PDOException If you set the PDO::ATTR_ERRMODE parameter, it will only take effect on further operations. up down -1 angela 2 years ago I spent hours today trying to get my portable wamp to update a database, using localhost:800 and port 3307 for mysql. For it to work I needed to adjust the connect() instruction as described: $dsn = "mysql:host=127.0.0.1;port=3307;dbname=mydatabase"; up down 0 ekkart at ekkart dot de 2 years ago In order to set the encoding of the database connection, use the exec function: <?php try { $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); $dbh->exec("SET CHARACTER SET utf8"); $dbh = null; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } ?> up down

-1 dan dot franklin at pearson dot com 4 years ago Note that you can specify a port number with "port=####", but this port number will be ignored if the host is localhost. If you want to connect to a local port other than the default, use host=127.0.0.1 instead of localhost.

Transacciones y 'auto-commit' Una vez realizada una conexin a travs de PDO, es necesario comprender cmo PDO gestiona las transacciones antes de comenzar a realizar consultas. Si no se han manejado anteriormente transacciones, estas ofrecen cuatro caractersticas principales: Atomicidad, Consistencia, Aislamiento y Durabilidad (ACID por sus siglas en ingls). En trminos sencillos, cualquier trabajo llevado a cabo en una transaccin, incluso si se hace por etapas, se garantiza que ser aplicado a la base de datos de forma segura, y sin interferencia de otras conexiones, cuando sea consignado ('commit'). El trabajo transaccional puede tambin ser deshecho automticamente bajo peticin (siempre y cuando no se haya consignado), lo que hace ms sencillo el manejo de errores en los scripts. Las transacciones son implementadas tpicamente para hacer que el lote de cambios se apliquen a la vez; esto tiene el buen efecto secundario de mejorar drsticamente la eficiencia de las actualizaciones. En otras palabras, las transacciones pueden hacer los scripts ms rpidos y potencialmente ms robustos (an as es necesario usarlas correctamente para obtener ese beneficio). Desafortunadamente, no todas las bases de datos admiten transacciones, por lo que PDO necesita ser ejecutado en lo es conocido como el modo "auto-commit" cuando se abra por primera vez la conexin. El modo auto-commit significa que toda consulta que se ejecute tiene su propia transaccin implcita, si la base de datos lo admite, o ninguna transaccin si la base de datos no las admite. Si fuera necesario el uso de transacciones, se debe usar el mtodo PDO::beginTransaction() para iniciar una. Si el controlador subyacente no admite transacciones, se lanzar una PDOException (independientemente de la configuracin del manejo de errores: esto es siempre una condicin de error serio). Una vez que se est en una transaccin, se puede usarPDO::commit() o PDO::rollBack() para finalizarla, dependiendo del xito del cdigo que se ejecute durante la transaccin. Advertencia PDO slo comprueba las capacidades de la transaccin al nivel del controlador. Si una cierta condicin en tiempo de ejecucin implica que las transacciones no estn

disponibles, PDO::beginTransaction() seguir devolviendo TRUE sin ninn error si el servidor de bases de datos acepta la solicitud de iniciar una transaccin. Un ejemplo de esto podra ser el intentar usar transacciones en tablas MyISAM en una base de datos MySQL. Cuando el script finaliza o cuando una conexin est a punto de ser cerrada, si existe una transaccin pendiente, PDO la revertir automticamente. Esto es una medida de seguridad que ayuda a evitar inconsistencia en los casos donde el script finaliza inesperadamente (si no consign la transaccin, se asume que algo sali mal, con lo cual se realiza la reversin para la seguridad de los datos). Advertencia La reversin automtica slo ocurre si se inicia una transaccin a travs dePDO::beginTransaction(). Si se ejecuta manualmente una consulta que inicie una transaccin, PDO no tiene forma de conocer algo acerca de sta y, por tanto, no puede revertirla si algo sale mal. Ejemplo #1 Ejecucin de un lote en una transaccin En el siguiente ejemplo, se asume que se ha creado un conjunto de entradas para un nuevo empleado, al cual se le ha asignado el nmero de ID 23. Adems de introducir los datos bsicos de una persona, tambin es necesario registrar su sueldo. Es bastante simple hacer dos actualizaciones independientes, pero encerrndolas en las llamadas PDO::beginTransaction() y PDO::commit(), se garantiza que nadie ms ser capaz de ver los cambios hasta que se hayan completado. Si algo sale mal, el bloque catch revierte los cambios realizados desde que se cre la transaccin, y luego imprime un mensaje de error. <?php try { $gbd = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2', array(PDO::ATTR_PERSISTENT => true)); echo "Conectado\n"; } catch (Exception $e) { die("No se pudo conectar: " . $e->getMessage()); } try { $gbd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $gbd->beginTransaction(); $gbd->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')"); $gbd->exec("insert into salarychange (id, amount, changedate)

values (23, 50000, NOW())"); $gbd->commit(); } catch (Exception $e) { $gbd->rollBack(); echo "Fallo: " . $e->getMessage(); } ?> No hay lmite en la realizacin de actualizaciones en una transaccin; tambin es posible ejecutar consultas complejas para extraer datos, y posiblemente usar esa informacin para construir ms actualizaciones y consultas; mientras que la transaccin est activa, se garantiza que nadie ms puede realizar cambios mientras se est en mitad del trabajo. Para ms informacin sobre transacciones, consulte la documentacin proporcionada por su servidor de base de datos.

add a noteUser Contributed Notes Transacciones y 'auto-commit' - [2 notes] up down 2 pasamio at gmail dot com 3 months ago Typically data definition language clauses (DDL) will trigger the database engine to automatically commit: http://dev.mysql.com/doc/refman/5.0/en/implicit-commit.html Many other databases (e.g. Oracle) will implicitly commit before and after running DDL statements. up down -1 josh dot ribakoff at gmail dot com 2 years ago PDO seems to differ from the other mysql libraries in that it will revert to auto-commit mode if you are issuing certain types of queries on certain drivers (Ex. DROP TABLE)

Sentencias preparadas y procedimientos almacenados Muchas de las bases de datos ms maduras admiten el concepto de sentencias preparadas. Estas pueden definirse como un tipo de plantillas compiladas para SQL que las aplicaciones quieren ejecutar, que pueden ser personalizadas usando parmetros de variables. Las sentencias preparadas ofrecen dos grandes beneficios: La consulta slo necesita ser analizada (o preparada) una vez, pero puede ser ejecutada mltiples veces con los mismos o diferentes parmetros. Cuando la consulta es preparada, la base de datos analizar, compilar y optimizar su plan para ejecutarla. Para consultas complejas, este proceso puede tomar suficiente tiempo como para que ralentice notablemente una aplicacin si fuera necesario repetir la misma consulta muchas veces con los mismos parmetros. Usando una sentencia preparada, la aplicacin evita repetir el ciclo de anlisis/compilacin/optimizacin. Esto significa que las sentencias preparadas usan menos recursos y se ejecutan ms rpidamente. Los parmetros para las sentencias preparadas no necesitan estar entrecomillados; el controlador automticamente se encarga de esto. Si una aplicacin usa exclusivamente sentencias preparadas, el desarrollador puede estar seguro de que no ocurrirn inyecciones SQL (sin embargo, si otras partes de la consulta se construyen con datos de entrada sin escapar, las inyecciones SQL pueden ocurrir). Las sentencias preparadas son tan tiles que son la nica caracterstica que PDO emular para los controladores que no las admitan. Esto asegura que una aplicacin sea capaz de usar el mismo paradigma de acceso a datos independientemente de las capacidades de la base de datos. Ejemplo #1 Inserciones reiteradas usando sentencias preparadas Este ejemplo realiza dos consultas de tipo INSERT sustituyendo name y value por los valores correspondientes. <?php $sentencia = $gbd->prepare("INSERT INTO REGISTRY (name, value) VALUES (:nam e, :value)"); $sentencia->bindParam(':name', $nombre); $sentencia->bindParam(':value', $valor); // insertar una fila $nombre = 'uno'; $vavalorlue = 1; $sentencia->execute(); // insertar otra fila con diferentes valores $nombre = 'dos';

$valor = 2; $stmt->execute(); ?> Ejemplo #2 Inserciones reiteradas usando sentencias preparadas Este ejemplo realiza dos consultas de tipo INSERT sustituyendo name y value por el parmetro de sustitucin ? posicional. <?php $sentencia = $gbd->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?) "); $sentencia->bindParam(1, $nombre); $sentencia->bindParam(2, $valor); // insertar una fila $nombre = 'uno'; $valor = 1; $sentencia->execute(); // insertar otra fila con diferentes valores $nombre = 'dos'; $valor = 2; $sentencia->execute(); ?> Ejemplo #3 Obtener datos usando sentencias preparadas Este ejemplo obtiene datos basndose en un valor de clave proporcionado por un formulario. Los datos de usuario son automticamente entrecomillados, con lo cual no hay riesgo de un ataque por inyeccin SQL. <?php $sentencia = $gbd->prepare("SELECT * FROM REGISTRY where name = ?"); if ($sentencia->execute(array($_GET['name']))) { while ($fila = $sentencia->fetch()) { print_r($fila); } } ?> Si el controlador de la base de datos lo admite, una aplicacin podra tambin vincular parmetros para salida y para entrada. Los parmetros de salida son tpicamente usados para recuperar valores de procedimientos almacenados. Los parmetros de salida son ligeramente

ms complejos de usar que los de entrada, de manera que el desarrollador debe saber lo grande que podra ser un parmetro dado cuando se vincula. Si el valor resulta ser ms grande que el tamao que indica, se emitir un error. Ejemplo #4 Llamar a un procedimiento almacenado con un parmetro de salida <?php $sentencia = $gbd->prepare("CALL sp_returns_string(?)"); $sentencia->bindParam(1, $valor_devuleto, PDO::PARAM_STR, 4000); // llamar al procedimiento almacenado $sentencia->execute(); print "El procedimiento devolvi $valor_devuleto\n"; ?> Los desarrolladores podran tambin especificar parmetros que contienen valores tanto de entrada como de salida; la sintaxis es similar a la de los parmetros de salida. En el siguiente ejemplo, la cadena 'hola' es pasada al procedimiento almacenado, y cuando ste finaliza, 'hola' es reemplazada con el valor de retorno del procedimiento. Ejemplo #5 Llamar a un procedimiento almacenado con un parmetro de entrada/salida <?php $sentencia = $gbd->prepare("CALL sp_takes_string_returns_string(?)"); $valor = 'hola'; $sentencia->bindParam(1, $valor, PDO::PARAM_STR| PDO::PARAM_INPUT_OUTPUT, 4000); // llamar al procedimiento almacenado $sentencia->execute(); print "procedure returned $valor\n"; ?> Ejemplo #6 Uso invlido de un parmetro de sustitucin <?php $sentencia = $gbd->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'"); $sentencia->execute(array($_GET['name'])); // los parmetros de sustitucin deben usarse en el lugar del valor completo $sentencia = $gbd->prepare("SELECT * FROM REGISTRY where name LIKE ?");

$sentencia->execute(array("%$_GET[name]%")); ?>

Errores y su manejo

Transacciones y 'auto-commit'

[edit] Last updated: Fri, 25 Jan 2013 add a noteUser Contributed Notes Sentencias preparadas y procedimientos almacenados - [5 notes] up down 7 adam at pyramidpower dot com dot au 2 years ago Note that when using name parameters with bindParam, the name itself, cannot contain a dash '-'. example: <?php $stmt = $dbh->prepare ("INSERT INTO user (firstname, surname) VALUES (:fname, :s-name)"); $stmt -> bindParam(':f-name', 'John'); $stmt -> bindParam(':s-name', 'Smith'); $stmt -> execute(); ?> The dashes in 'f-name' and 's-name' should be replaced with an underscore or no dash at all. See http://bugs.php.net/43130 Adam up down 1

oldmoscow dot mail dot ru 2 years ago Note for MySQL: to use input/output parameters for stored procedures with PDO use PDO.Query() statement. For example: <?php $dbh->query("CAST SomeStoredProcedure($someInParameter1, $someInParameter2, @someOutParameter)"); $dbh->query("SELECT @someOutParameter"); ?> Or, if you want very much to use PDO.Prepare(), insert "SELECT @someOutParameter" in your stored procedure and then use: <?php $stmt = $dbh->prepare("CAST SomeStoredProcedure(?, ?)"); $stmt ->execute(array($someInParameter1, $someInParameter2)); ?> up down 1 Anonymous 2 years ago Note for MySQL: to use input/output parameters for stored procedures with PDO use PDO.Query() statement. For example: <?php $dbh->query("CAST SomeStoredProcedure($someInParameter1, $someInParameter2, @someOutParameter)"); $dbh->query("SELECT @someOutParameter"); ?> Or, if you want very much to use PDO.Prepare(), insert "SELECT

@someOutParameter" in your stored procedure and then use: <?php $stmt = $dbh->prepare("CAST SomeStoredProcedure(?, ?)"); $stmt ->execute(array($someInParameter1, $someInParameter2)); ?> up down 0 mackwic at gmail dot com 3 years ago You have to make attention to the parameters send to the method. We can imagine that a request like that can work: <?php $query = 'SELECT ? FROM ? WHERE id = ?'; ?> But in fact, it's a hijack of prepared query, which MUST be used *ONLY* to change the condition (here the last '?' ). You do not send my_table.my_row or my_scheme.my_table because this parameters are essentials to optimize the query before execution. Other thing: prepared query can not be serialized to reuse it some time later. For that you can use a mask (http://fr2.php.net/singleton) A prepared query is temporary. up down -4 frame at dynamiccreated dot de 4 months ago Keep in mind, after creating a table on same driver instance you should re-create your prepared statement too. If you will not do you will get a nice message "database schema has changed" with error code "00000" which indicates that is not an error but it is - at least working with SQlite no data is returned on SELECT-clause.

Errores y su manejo PDO ofrece tres estrategias diferentes de manejar errores, para adaptarse a su estilo de desarrollo de aplicaciones. PDO::ERRMODE_SILENT Este es el modo predeterminado. PDO simplemente establecer l mismo el cdigo de error para su inspeccin usando los mtodos PDO::errorCode() y PDO::errorInfo() tanto en objetos de sentencias como de bases de datos. Si el error result de una llamada sobre un objeto de sentencia, se deber invocar al mtodo PDOStatement::errorCode() o PDOStatement::errorInfo() sobre dicho objeto. Si el error result de una llamada sobre un objeto de bases de datos, se deber invocar, en su lugar, a los mtodos del objeto de bases de datos. PDO::ERRMODE_WARNING Adems de establecer el cdigo de error, PDO emitir un mensaje E_WARNING tradicional. Esta configuracin es til durante la depuracin o las pruebas, si lo que se quiere es ver qu problemas han ocurrido, sin interrumpir el flujo de la aplicacin. PDO::ERRMODE_EXCEPTION Adems de establecer el cdigo de error, el PDO lanzar una excepcin de tipo PDOException y establecer sus propiedades para reflejar el error y la informacin del mismo. Esta configuracin tambin es til durante la depuracin, ya que, de hecho, sealar el lugar del error del script, apuntando a reas pontencialmente problemticas del cdigo (recuerde: las transacciones son automticamente revertidas si la excepcin causa que finalice el script). El modo 'Exception' tambin es til porque se puede estructurar el manejo de errores con ms claridad que con el estilo tradicional de advertencias de PHP, y con menos cdigo/anidacin que con la ejecucin en modo silencioso y comprobando explcitamente el valor devuelto de cada llamada a la base de datos. Vase la referencia de Excepciones para ms informacin sobre Excepciones en PHP. PDO utiliza el estndar de cadenas de cdigos de error SQLSTATE de SQL-92; cada controlador de PDO es responsable de hacer que correspondan su cdigos nativos con los cdigos SQLSTATE apropiados. El mtodoPDO::errorCode() devuelve un nico cdigo SQLSTATE. Si fuera necesaria ms informacin especfica sobre el error, PDO tambin ofrece el mtodo PDO::errorInfo(), que devuelve un array que contiene el cdigo SQLSTATE, el cdigo de error especfico del controlador, y la cadena de error especfica. Ejemplo #1 Crear una instancia de PDO y establecer el modo de error

<?php $dsn = 'mysql:dbname=testdb;host=127.0.0.1'; $usuario = 'usuario'; $contrasea = 'contrasea'; try { $gbd = new PDO($dsn, $usuario, $contrasea); $gbd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo 'Fall la conexin: ' . $e->getMessage(); } ?> Objetos grandes (LOBs) En algn punto de una aplicacin, podra ser necesario almacenar datos "grandes" en la base de datos. Grande tpicamente significa "alrededor de 4kb o ms", aunque algunas bases de datos pueden manejar fcilmente hasta 32kb antes de que los datos se consideren "grandes". Los LOBs (acrnimo de 'Large Objects') pueden ser de texto o binarios. PDO permite trabajar con este tipo de datos grandes usando el cdigo del tipoPDO::PARAM_LOB en llamadas a PDOStatement::bindParam() o PDOStatement::bindColumn(). PDO::PARAM_LOBin dica a PDO que haga corresponder los datos como un flujo, por lo que se pueden manipular usando la API de flujos de PHP. Ejemplo #1 Mostrar una imagen desde una base de datos Este ejemplo vincula un LOB a una variable llamada $lob, y luego lo enva al navegador usando fpassthru(). Ya que el LOB est representado como un flujo, se pueden usar funciones tales como fgets(), fread() ystream_get_contents() para manejarlo. <?php $bd = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2'); $sentencia = $bd->prepare("select contenttype, imagedata from images where id=?"); $sentencia->execute(array($_GET['id'])); $sentencia->bindColumn(1, $tipo, PDO::PARAM_STR, 256); $sentencia->bindColumn(2, $lob, PDO::PARAM_LOB); $sentencia->fetch(PDO::FETCH_BOUND); header("Content-Type: $tipo");

fpassthru($lob); ?> Ejemplo #2 Insertar una imagen en una base de datos Este ejemplo abre un fichero y pasa el gestor del fichero a PDO para insertarlo como un LOB. PDO har todo lo posible para enviar el contenido del fichero a la base de datos de la manera ms eficiente. <?php $bd = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2'); $sentencia = $bd->prepare("insert into images (id, contenttype, imagedata) values (?, ?, ?)"); $id = get_new_id(); // alguna funcin para asignar un nuevo ID // se asume que se est ejecutando como parte de un formulario de subidas de fichero s // Se puede encontrar ms informacin en la documentacin de PHP $fp = fopen($_FILES['file']['tmp_name'], 'rb'); $sentencia->bindParam(1, $id); $sentencia->bindParam(2, $_FILES['file']['type']); $sentencia->bindParam(3, $fp, PDO::PARAM_LOB); $bd->beginTransaction(); $sentencia->execute(); $bd->commit(); ?> Ejemplo #3 Insertar una imagen en una base de datos: Oracle Oracle requiere una sintaxis ligeramente diferente para insertar un LOB desde un fichero. Tambin es esencial que se realice la insercin bajo una transaccin, si no, el LOB recin insertado ser consignado con una longitud cero como parte de la consigna implcita que ocurre cuando la consulta se ejecuta: <?php $bd = new PDO('oci:', 'scott', 'tiger'); $sentencia = $bd->prepare("insert into images (id, contenttype, imagedata) " . "VALUES (?, ?, EMPTY_BLOB()) RETURNING imagedata INTO ?"); $id = get_new_id(); // alguna funcin para asignar un nuevo ID

// se asume que se est ejecutando como parte de un formulario de subidas de fichero s // Se puede encontrar ms informacin en la documentacin de PHP $fp = fopen($_FILES['file']['tmp_name'], 'rb'); $sentencia->bindParam(1, $id); $sentencia->bindParam(2, $_FILES['file']['type']); $sentencia->bindParam(3, $fp, PDO::PARAM_LOB); $sentencia->beginTransaction(); $sentencia->execute(); $sentencia->commit(); ?>

PDO

Errores y su manejo

[edit] Last updated: Fri, 25 Jan 2013 add a noteUser Contributed Notes Objetos grandes (LOBs) - [5 notes] up down 1 diogoko at gmail dot com 3 years ago PDOStatement's methods bindParam and bindValue also work with strings, as in: <?php $data = file_get_contents($filename); $stmt->bindValue(1, $data, PDO::PARAM_LOB); //... ?> This was the only way I could make it work with PostgreSQL. up

down 0 xorinox at gmx dot ch 2 years ago I find it easier to use stream_get_contens to fetch the data of a lob using the file handle. <?php $stmt = $pdo->con->prepare( 'select * from filetable' ); $stmt->execute(); $res = $stmt->fetchAll( PDO::FETCH_ASSOC ); for( $i=0; $i<count($res); $i++ ){ $filename = "C:/tmp/".$res[$i]['FILE_ID'].'.xml'; $content = stream_get_contents( $res[$i]['DATA_FILE'] ); file_put_contents( $filename, $content ); } ?> up down 0 Jeremy Cook 2 years ago There seems to be a bug that affects example 1 above. PDO::PARAM_LOB when used with pdo::bindColumn() is supposed to return a stream but it returns a string. Passing this string to fpassthru() then triggers an error with the message 'supplied argument is not a valid stream resource'. This has been reported in bug #40913. The work around is to do the following: <?php $stmt = $db->prepare("select contenttype, imagedata from images where id=?"); $stmt->execute(array($_GET['id'])); $stmt->bindColumn(1, $type, PDO::PARAM_STR, 256); $stmt->bindColumn(2, $lob, PDO::PARAM_LOB); $stmt->fetch(PDO::FETCH_BOUND); header("Content-Type: $type");

echo($lob); ?> Since the browser is expecting an image after the call to header() writing the string representation of the binary output with echo() has the same affect as calling fpassthru(). up down 0 http://matts.org/ 3 years ago A big gotcha exists for Oracle users. You have to save CLOB objects using PDO::PARAM_STR, not PDO::PARAM_LOB. But you MUST send the 4th argument, usually strlen($subject) or you get a LONG error. up down 0 knl at bitflop dot com 4 years ago I spend a lot of time trying to get this to work, but no matter what I did PDO corrupted my data. I finally discovered that I had been using: $pdo->exec('SET CHARACTER SET utf8'); in the TRY part of my connection script. This off course doesn't work when you feed binary input to PDO using the parameter lob.

La clase PDO (PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)

Introduccin Representa una conexin entre PHP y un servidor de bases de datos. Sinopsis de la Clase PDO { __construct ( string $dsn [, string $username [, string $password [, array $driver_option s ]]] ) bool beginTransaction ( void ) bool commit ( void ) mixed errorCode ( void ) array errorInfo ( void ) int exec ( string $statement ) mixed getAttribute ( int $attribute ) static array getAvailableDrivers ( void ) bool inTransaction ( void ) string lastInsertId ([ string $name = NULL ] ) PDOStatement prepare ( string $statement [, array $driver_options = array() ] ) PDOStatement query ( string $statement ) string quote ( string $string [, int $parameter_type = PDO::PARAM_STR ] ) bool rollBack ( void ) bool setAttribute ( int $attribute , mixed $value ) } Tabla de contenidos PDO::beginTransaction Inicia una transaccin PDO::commit Consigna una transaccin PDO::__construct Crea una instancia de PDO que representa una conexin a una base de datos PDO::errorCode Obtiene un SQLSTATE asociado con la ltima operacin en el manejador de la base de datos PDO::errorInfo Obtiene informacin extendida del error asociado con la ltima operacin del manejador de la base de datos PDO::exec Ejecuta una sentencia SQL y devuelve el nmero de filas afectadas PDO::getAttribute Devuelve un atributo de la conexin a la base de datos PDO::getAvailableDrivers Devuelve un array con los controladores de PDO disponibles PDO::inTransaction Comprueba si una transaccin est activa PDO::lastInsertId Devuelve el ID de la ltima fila o secuencia insertada PDO::prepare Prepara una sentencia para su ejecucin y devuelve un objeto sentencia

PDO::query Ejecuta una sentencia SQL, devolviendo un conjunto de resultados como un objeto PDOStatement PDO::quote Entrecomilla una cadena de caracteres para usarla en una consulta PDO::rollBack Revierte una transaccin PDO::setAttribute Establece un atributo

PDO::beginTransaction

Objetos grandes (LOBs)

[edit] Last updated: Fri, 25 Jan 2013 add a noteUser Contributed Notes PDO - [6 notes] up down 1 RockMeAmadeus 2 years ago PDO::getAvailableDrivers is the only PDO static method so it needs a double colon. The other PDO methods are used by an object, so they should use the -> syntax. * PDO->beginTransaction Initiates a transaction * PDO->commit Commits a transaction * PDO->__construct Creates a PDO instance representing a connection to a database * PDO->errorCode Fetch the SQLSTATE associated with the last operation on the database handle * PDO->errorInfo Fetch extended error information associated with the last operation on the database handle * PDO->exec Execute an SQL statement and return the number of affected rows * PDO->getAttribute Retrieve a database connection attribute * PDO::getAvailableDrivers Return an array of available PDO drivers * PDO->lastInsertId Returns the ID of the last inserted row or sequence value * PDO->prepare Prepares a statement for execution and returns a statement object * PDO->query Executes an SQL statement, returning a result set as a PDOStatement object * PDO->quote Quotes a string for use in a query.

* PDO->rollBack Rolls back a transaction * PDO->setAttribute Set an attribute up down 3 schizo_mind at hotmail dot com 4 years ago <?php class PDOConfig extends PDO { private $engine; private $host; private $database; private $user; private $pass; public function __construct(){ $this->engine = 'mysql'; $this->host = 'localhost'; $this->database = ''; $this->user = 'root'; $this->pass = ''; $dns = $this->engine.':dbname='.$this->database.";host=".$this->host; parent::__construct( $dns, $this->user, $this->pass ); } } ?> up down 0 Megaloman 3 years ago "And storing username/password inside class is not a very good idea for production code." Good idea is to store database connection settings in *.ini files but you have to restrict access to them. For example this way:

my_setting.ini: [database] driver = mysql host = localhost ;port = 3306 schema = db_schema username = user password = secret Database connection: <?php class MyPDO extends PDO { public function __construct($file = 'my_setting.ini') { if (!$settings = parse_ini_file($file, TRUE)) throw new exception('Unable to open ' . $file . '.'); $dns = $settings['database']['driver'] . ':host=' . $settings['database']['host'] . ((!empty($settings['database']['port'])) ? (';port=' . $settings['database']['port']) :'') . ';dbname=' . $settings['database']['schema']; parent::__construct($dns, $settings['database']['username'], $settings['database'] ['password']); } } ?> Database connection parameters are accessible via human readable ini file for those who screams even if they see one PHP/HTML/any_other command. up down 0 kcleung at kcleung dot no-ip dot org 2 years ago

Here is an singleton PDO example: ###### config.ini ###### db_driver=mysql db_user=root db_password=924892xp [dsn] host=localhost port=3306 dbname=localhost [db_options] PDO::MYSQL_ATTR_INIT_COMMAND=set names utf8 [db_attributes] ATTR_ERRMODE=ERRMODE_EXCEPTION ############ <?php class Database { private static $link = null ; private static function getLink ( ) { if ( self :: $link ) { return self :: $link ; } $ini = _BASE_DIR . "config.ini" ; $parse = parse_ini_file ( $ini , true ) ; $driver = $parse [ "db_driver" ] ; $dsn = "${driver}:" ; $user = $parse [ "db_user" ] ; $password = $parse [ "db_password" ] ; $options = $parse [ "db_options" ] ; $attributes = $parse [ "db_attributes" ] ;

foreach ( $parse [ "dsn" ] as $k => $v ) { $dsn .= "${k}=${v};" ; } self :: $link = new PDO ( $dsn, $user, $password, $options ) ; foreach ( $attributes as $k => $v ) { self :: $link -> setAttribute ( constant ( "PDO::{$k}" ) , constant ( "PDO::{$v}" ) ) ; } return self :: $link ; } public static function __callStatic ( $name, $args ) { $callback = array ( self :: getLink ( ), $name ) ; return call_user_func_array ( $callback , $args ) ; } } ?> <?php // examples $stmt = Database :: prepare ( "SELECT 'something' ;" ) ; $stmt -> execute ( ) ; var_dump ( $stmt -> fetchAll ( ) ) ; $stmt -> closeCursor ( ) ; ?> up down -1 williambarry007 at gmail dot com 1 year ago PDO and Dependency Injection Dependency injection is good for testing. But for anyone wanting various data mapper objects to have a database connection, dependency injection can make other model code very messy because database objects have to be instantiated all over the place and given to the data mapper objects.

The code below is a good way to maintain dependency injection while keeping clean and minimal model code. <?php class DataMapper { public static $db; public static function init($db) { self::$db = $db; } } class VendorMapper extends DataMapper { public static function add($vendor) { $st = self::$db->prepare( "insert into vendors set first_name = :first_name, last_name = :last_name" ); $st->execute(array( ':first_name' => $vendor->first_name, ':last_name' => $vendor->last_name )); } } // In your bootstrap $db = new PDO(...); DataMapper::init($db); // In your model logic

$vendor = new Vendor('John', 'Doe'); VendorMapper::add($vendor); ?> up down -1 anrdaemon at freemail dot ru 4 years ago Keep in mind, you MUST NOT use 'root' user in your applications, unless your application designed to do a database maintenance. And storing username/password inside class is not a very good idea for production code. You would need to edit the actual working code to change settings, which is bad. La clase PDOStatement (PHP 5 >= 5.1.0, PECL pdo >= 1.0.0) Introduccin Representa una sentencia preparada y, despus de la ejecucin de la instruccin, un conjuntos de resultados asociado. Sinopsis de la Clase PDOStatement implements Traversable { /* Propiedades */ readonly string $queryString; /* Mtodos */ bool bindColumn ( mixed $column , mixed &$param [, int $type [, int $maxlen [, mixed $driverdata]]] ) bool bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int$length [, mixed $driver_options ]]] ) bool bindValue ( mixed $parameter , mixed $value [, int $data_type = PDO::PARAM_STR ] ) bool closeCursor ( void ) int columnCount ( void ) bool debugDumpParams ( void ) string errorCode ( void ) array errorInfo ( void ) bool execute ([ array $input_parameters ] )

mixed fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int$cursor_offset = 0 ]]] ) array fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] ) string fetchColumn ([ int $column_number = 0 ] ) mixed fetchObject ([ string $class_name = "stdClass" [, array $ctor_args ]] ) mixed getAttribute ( int $attribute ) array getColumnMeta ( int $column ) bool nextRowset ( void ) int rowCount ( void ) bool setAttribute ( int $attribute , mixed $value ) bool setFetchMode ( int $mode ) } Propiedades queryString La cadena de consulta utilizada. Tabla de contenidos PDOStatement::bindColumn Vincula una columna a una variable de PHP PDOStatement::bindParam Vincula un parmetro al nombre de variable especificado PDOStatement::bindValue Vincula un valor a un parmetro PDOStatement::closeCursor Cierra un cursor, habilitando a la sentencia para que sea ejecutada otra vez PDOStatement::columnCount Devuelve el nmero de columnas de un conjunto de resultados PDOStatement::debugDumpParams Vuelca un comando preparado de SQL PDOStatement::errorCode Obtiene el SQLSTATE asociado con la ltima operacin del gestor de sentencia PDOStatement::errorInfo Obtiene informacin ampliada del error asociado con la ltima operacin del gestor de sentencia PDOStatement::execute Ejecuta una sentencia preparada PDOStatement::fetch Obtiene la siguiente fila de un conjunto de resultados PDOStatement::fetchAll Devuelve un array que contiene todas las filas del conjunto de resultados PDOStatement::fetchColumn Devuelve una nica columna de la siguiente fila de un conjunto de resultados PDOStatement::fetchObject Obtiene la siguiente fila y la devuelve como un objeto PDOStatement::getAttribute Recupera un atributo de sentencia

PDOStatement::getColumnMeta Devuelve metadatos de una columna de un conjunto de resultados PDOStatement::nextRowset Avanza hasta el siguiente conjunto de filas de un gestor de sentencia multiconjunto de filas PDOStatement::rowCount Devuelve el nmero de filas afectadas por la ltima sentencia SQL PDOStatement::setAttribute Establece un atributo de sentencia PDOStatement::setFetchMode Establece el modo de obtencin para esta sentencia

add a noteUser Contributed Notes PDOStatement - [2 notes] up down 0 Dmitri Snytkine 1 year ago It looks like cloning PDOStatement object does not make any sense because while clone($sth) will not generate any errors, the returned object is not a new object but a reference to original PDOStatement object $sth. up down 0 rosko at zeta dot org dot au 3 years ago There are many references around for returning a refcursor from a pgSQL function using pg_query. All essentially boil down to executing the following single statement (or some variation of it): begin; select yourFunction(params...); fetch all in cursorname; commit; In PDO, this doesn't work because PDO won't allow multiple statements submitted as a single statement (due to SQL injection detection). Instead, try this or similar: <?php $sql = 'select yourFunction(params...)'; $db = new PDO('pgsql:dbname=yourDBname');

$db->beginTransaction(); $cmd = $db->prepare($sql); if ($cmd->execute()) { if ($query = $db->query('fetch all in cursorname')) { ...processing... $query->closeCursor(); $cmd->closeCursor(); } } $db->commit(); ?> La clase PDOException (PHP 5 >= 5.1.0) Introduccin Representa un error generado por PDO. No se debera lanzar una PDOException desde el cdigo. VaseExcepciones para ms informacin acerca de las excepciones en PHP. Sinopsis de la Clase PDOException extends RuntimeException { /* Propiedades */ public array $errorInfo ; protected string $message ; protected string $code ; /* Mtodos heredados */ final public string Exception::getMessage ( void ) final public Exception Exception::getPrevious ( void ) final public mixed Exception::getCode ( void ) final public string Exception::getFile ( void ) final public int Exception::getLine ( void ) final public array Exception::getTrace ( void ) final public string Exception::getTraceAsString ( void ) public string Exception::__toString ( void ) final private void Exception::__clone ( void ) } Propiedades errorInfo Corresponde a PDO::errorInfo() o PDOStatement::errorInfo() message

Mensaje de error textual. Exception::getMessage() para acceder a l. code Cdigo de error de SQLSTATE. Utilice Exception::getCode() para acceder a l.

Controladores de PDO

PDOStatement::setFetchMode

[edit] Last updated: Fri, 25 Jan 2013 add a noteUser Contributed Notes PDOException - [3 notes] up down 0 Marco01_809 &#34;at&#34; web &#34;dot&#34; de 2 years ago This is a PDOException Error handler for Using/Debugging in Web Browser. <?php echo '<html><head><title>PHP PDO Tests</title></head><body>'; // Try the following code: try { $db = new PDO('sqlite:database.sdb'); // Create a new PDO Object $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Set Errorhandling to Exception $db->query("BlaBlaBla"); // Query something wrong $db = null; // "Disconnect" } catch (PDOException $err) { // Catch Expcetions from the above code for our Exception Handling $trace = '<table border="0">'; foreach ($err->getTrace() as $a => $b) { foreach ($b as $c => $d) { if ($c == 'args') {

foreach ($d as $e => $f) { $trace .= '<tr><td><b>' . strval($a) . '#</b></td><td align="right"><u>args:</u></td> <td><u>' . $e . '</u>:</td><td><i>' . $f . '</i></td></tr>'; } } else { $trace .= '<tr><td><b>' . strval($a) . '#</b></td><td align="right"><u>' . $c .'</u>:</td><td></td><td><i>' . $d . '</i></td>'; } } } $trace .= '</table>'; echo '<br /><br /><br /><font face="Verdana"><center><fieldset style="width: 66%; border: 4px solid white; background: black;"><legend><b>[</b>PHP PDO Error ' . strval($err->getCode()) . '<b>]</b></legend> <table border="0"><tr><td align="right"><b><u>Message:</u></b></td><td><i>' . $err>getMessage() . '</i></td></tr><tr><td align="right"><b><u>Code:</u></b></td><td><i>' . strval($err>getCode()) . '</i></td></tr><tr><td align="right"><b><u>File:</u></b></td><td><i>' . $err->getFile() . '</i></td></tr><tr><td align="right"><b><u>Line:</u></b></td><td><i>' . strval($err>getLine()) . '</i></td></tr><tr><td align="right"><b><u>Trace:</u></b></td><td><br /><br />' . $trace . '</td></tr></table></fieldset></center></font>'; } echo '</body></html>'; ?> up down 0 samuelelliot+php dot net at gmail dot com 2 years ago PDOException has two methods for retrieving information about an error. When interpreting the PDOException I run into a problem, the error code that is provided by getCode() is meaningless. I have come up with a method to make both the error code and message more usable. A bad username or password would normally provide the following:

CODE : 0 Message : "SQLSTATE[28000] [1045] Access denied for user 'user'@'example.com' (using password: YES)" Using my extended exception class provides: CODE: "28000" Message: "Access denied for user 'user'@'example.com' (using password: YES)" <?php class pdoDbException extends PDOException { public function __construct(PDOException $e) { if(strstr($e->getMessage(), 'SQLSTATE[')) { preg_match('/SQLSTATE\[(\w+)\] \[(\w+)\] (.*)/', $e->getMessage(), $matches); $this->code = ($matches[1] == 'HT000' ? $matches[2] : $matches[1]); $this->message = $matches[3]; } } } ?> To walk threw the method; first the beginning of the message is checked for the SQLSTATE text. If the text is present, message is then parsed to pull the ANSI code, the SQL specific code, and the message. The parsed values are stored in there respective variables. The error code variable stores the ANSI code, unless ANSI is 'HT000' (unmapped error code) then SQL specific code is used. Using this class is easy; when interacting with PDO use a try catch set of blocks, as follows: <?php try { $pdo = new PDO($dns, $username, $password, $options); } catch (PDOException $e) { throw new pdoDbException($e);

} ?> Now you can use the normal error methods to retrieve the real error code and message. <?php echo $err->getCode(); // Outputs: "28000" echo $err->getMessage(); // Outputs: "Access denied for user 'user'@'example.com' (using password: YES)" ?> If you decide to use this code, be aware that the error code is a string (as apposed to PHP standard errors which are integers) as some error codes are alphanumeric. up down 0 Typer85 at gmail dot com 3 years ago Here is something interesting regarding a PDOException and it involves some of the annoyances that can be associated with PHP's dynamic nature. PDOException extends from RuntimeException, which in return extends from Exception. As such, it has access to the $code Protected Class Variable, which represents the Exception's code as an Integer (duh!) and can be accessed externally using the Exception::getCode Method. Here is the interesting part. PDOException actually redefines $code as a String and not an Integer because for its case, $code actually contains the Exception's SQL State, which is composed of characters and numbers. It is actually documented in the manual that $code is a String and not an Integer but it might not be immedietley clear because it is hidden by the fact that PDOException::getCode is documented to return an Integer and not a String! Some developers like to catch a PDOException and rethrow it as a different Exception if they wrap their database calls in an external library. For example, consider the

following code: <?php try { $PDO = new PDO( '...' ); // PDO Driver DSN. Throws A PDOException. } catch( PDOException $Exception ) { // PHP Fatal Error. Second Argument Has To Be An Integer, But PDOException::getCode Returns A // String. throw new MyDatabaseException( $Exception->getMessage( ) , $Exception>getCode( ) ); } ?> Be careful in that you have to typecast the value returned by PDOException::getCode to an Integer BEFORE you pass it as an Argument to your Exception's Constructor. The following will work: <?php try { $PDO = new PDO( '...' ); // PDO Driver DSN. Throws A PDOException. } catch( PDOException $Exception ) { // Note The Typecast To An Integer! throw new MyDatabaseException( $Exception->getMessage( ) , (int)$Exception>getCode( ) ); } ?> Hope this will save some developers some frustrating hours from an otherwise enjoyable job :)

Good Luck, Funciones de CUBRID (PDO_CUBRID) Introduccin PDO_CUBRID es un controlador que implementa la interfaz de Objetos de Datos de PHP (PDO) para habilitar el acceso desde PHP a bases de datos de CUBRID. Nota: Por ahora, la versin actual de PDO_CUBRID no admite conexiones persistentes. Instalacin Para construir la extensin PDO_CUBRID, CUBRID DBMS debe estar instalado en el mismo sistema donde se ejecute PHP. PDO_CUBRID es una extensin PECL, por lo que se han de seguir las instrucciones dadas enInstalacin de extensiones PECL para instalar la extensin PDO_CUBRID. Ejecute el comando configure para indicar la ubicacin del directorio base de CUBRID de la siguiente manera: $ ./configure --with-pdo-cubrid=/path/to/CUBRID[,shared] El valor predeterminado del comando configure es el de la variable de entorno de CUBRID. Actualmente, no hay ninguna DLL disponible para esta extensin PECL. Vase tambin la seccin Compilar en Windows . Para informacin detallada sobre la instalacin manual en Linux y Windows, por favor lea build-guide.html en el paquete PECL CUBRID para obtener referencias. Caractersticas Caractersticas de PDO_CUBRID Caracterstica Cursores desplazables Tiempo de espera Descripcin PDO_CUBRID admite cursores desplazables. El tipo de cursor predeterminado es de slo avance, y se puede usar el parmetro driver_options de PDO::prepare() para cambiar el tipo de cursor. PDO_CUBRID admite la configuracion del tiempo de espera de las ejecuciones de sentencias SQL; Se puede utilizar PDO::setAttribute() para establecer el valor del tiempo de espera. PDO_CUBRID admite autocommit_mode y transacciones, y autocommit_mode est deshabilitado Autocommit_mode y transacciones por omisin. Se puede usar PDO::setAttribute() para cambiar su estado. Si se usa PDO::beginTransaction() para iniciar una transaccin, se desactivar autocommit_mode automaticamente y PDO::rollBack(). Obsrvese que antes de deshabilitar autocommit_mode, cualquier trabajo pendiente es consignado automticamente. Sentencias SQL mltiples PDO_CUBRID admite sentencias SQL mltiples. Las sentencias SQL mltiples estn serparadas por puntos y comas (;)

Caractersticas de PDO_CUBRID Caracterstica Informacin del esquema Descripcin PDO_CUBRID implementa la funcin PDO::cubrid_schema() para obtener la informacin del esquema. PDO_CUBRID admite los tipos de datos BLOB/CLOB. El tipo LOB en PDO es representado como un flujo, por lo que pueden insertarse LOBs vinculando un flujo, y obtener LOBs leyendo de un flujo devuelto por CUBRID PDO. Por ejemplo: Ejemplo #1 Insertar LOBs en CUBRID PDO <?php $fp = fopen('lob_test.png', 'rb'); $sent_sql = "INSERT INTO lob_test(name, content) VALUES('lob_test.png', ?)"; $sentencia = $dbh->prepare($sent_sql); $ret = $sentencia->bindParam(1, $fp, PDO::PARAM_LOB); LOBs $ret = $sentencia->execute(); ?> Ejemplo #2 Obtener LOBs en CUBRID PDO <?php $sent_sql = "SELECT content FROM lob_test WHERE name='lob_test.png'"; $sentencia = $dbh->prepare($sent_sql); $sentencia->execute(); $resultado = $sentencia->fetch(PDO::FETCH_NUM); header("Content-Type: image/png"); fpassthru($resultado[0]); ?> Metadatos de columna La funcin PDOStatement::getColumnMeta() de CUBRID PDO devolver un array asociativo que contiene los siguientes valores: type name table def precision

Caractersticas de PDO_CUBRID Caracterstica Descripcin scale not_null auto_increment unique_key multiple_key primary_key foreign_key reverse_index reverse_unique Constantes predefinidas Estas constantes estn definidas por este controlador, y estarn disponibles slo cuando la extensin haya sido compilada con PHP, o bien sea cargada dinmicamente en ejecucin. Adems, estas constantes especficas del controlador deberan ser utilizadas slo si est usando este controlador. Usar atributos especficos del controlador con otro controlador podra resultar en un comportamiento inesperado. PDO::getAttribute() puede ser empleado para obtener el atributo PDO_ATTR_DRIVER_NAME para verificar el controlador, si el cdigo puede ejecutarse con mltiples controladores. Las siguientes constantes se puden usar al establecer el atributo de la base de datos. Se puede pasar aPDO::getAttribute() o a PDO::setAttribute(). Banderas de atributo de PDO::CUBRID Constante PDO::CUBRID_ATTR_ISOLATION_LEVEL Descripcin Nivel de aislamiento de las transacciones para la conexin de la base de datos. Tiempo de espera de las transacciones en segundos. Slo lectura. La longitud mxima de cadena PDO::CUBRID_ATTR_MAX_STRING_LENGTH para los diversos tipos de datos bit, varbit, char, varchar, nchar, nchar al utilizar la API de CUBRID PDO. Las siguientes constantes se puden usar al estableder el nivel de aislamiento de las transacciones. Se pueden pasar a PDO::getAttribute() o ser devueltas por PDO::setAttribute().

PDO::CUBRID_ATTR_LOCK_TIMEOUT

Banderas de nivel de aislamiento de PDO::CUBRID Constante Descripcin El nivel de aislamiento ms bajo (1). Podra ocurrir una lectura PDO::TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE sucia, no repetible o fantasma para la tupla, y puede ocurrir tambin una lectura no repetible para la tabla. Un nivel relativamente bajo de aislamiento (2). No ocurre una PDO::TRAN_COMMIT_CLASS_COMMIT_INSTANCE lectura sucia, pero podra ocurrir una lectura no repetible o fantasma. El nivel predeterminado de aislamiento de CUBRID (3). PDO::TRAN_REP_CLASS_UNCOMMIT_INSTANCE Podra ocurrir una lectura sucia, no repetible o fantasma para la tupla, pero se garantiza una lectura repetible para la tabla. Un nivel relativamente bajo de aislamiento (4). No ocurre una PDO::TRAN_REP_CLASS_COMMIT_INSTANCE lectura sucia, pero s podra ocurrir una lectura no repetible o fantasma. Un nivel de aislamiento relativamente alto (5). No ocurre PDO::TRAN_REP_CLASS_REP_INSTANCE una lectura sucia o no repetible, pero s podra ocurrir una lectura fantasma. El nivel de aislamiento ms alto (6). No ocurren los problemas PDO::TRAN_SERIALIZABLE concernientes a la concurrencia (p.ej. lectura sucia, no repetible, fantasma, etc.).

Las siguientes constantes se pueden usar al obtener la informacin del esquema. Se pueden pasar aPDO::cubrid_schema(). Banderas de esquema de PDO::CUBRID Constante PDO::CUBRID_SCH_TABLE Descripcin Obtener el nombre y el tipo de tabla de CUBRID. Obtener el nombre y el tipo de vista de CUBRID. Obtener la definicin de la consulta de la vista. Obtener los atributos de la columnas de la tabla. Obtener los atributos de la tabla. Obtener el mtodo de instancia. El mtodo de instancia es un mtodo invocado por una PDO::CUBRID_SCH_METHOD instancia de clase. Se usa ms a menudo que el mtodo de la clase, ya que se ejecutan ms operaciones en la instancia. Obtener el mtodo de la clase. El mtodo de la clase es un mtodo invocado por un objeto PDO::CUBRID_SCH_TABLE_METHOD de clase. Se usa normalmente para crear una nueva instancia de clase o para inicializarla. Tambin se usa para acceder o actualizar los atributos de la clase. PDO::CUBRID_SCH_METHOD_FILE Obtener la informacin del fichero donde el mtodo de la tabla est definido. Obtener el nombre y el tipo de la tabla desde la que se heredan atributos. Obtener el nombre y el tipo de la tabla que hereda los atributos desde esta tabla. Obtener las restricciones de la tabla. Obtener los disparadores de la tabla. Obtener la informacin de privilegios de la

PDO::CUBRID_SCH_VIEW

PDO::CUBRID_SCH_QUERY_SPEC

PDO::CUBRID_SCH_ATTRIBUTE PDO::CUBRID_SCH_TABLE_ATTRIBUTE

PDO::CUBRID_SCH_SUPER_TABLE

PDO::CUBRID_SCH_SUB_TABLE PDO::CUBRID_SCH_CONSTRAINT PDO::CUBRID_SCH_TRIGGER PDO::CUBRID_SCH_TABLE_PRIVILEGE

Banderas de esquema de PDO::CUBRID Constante Descripcin tabla. PDO::CUBRID_SCH_COL_PRIVILEGE Obtener la informacin de los privilegios de la columna.

PDO::CUBRID_SCH_DIRECT_SUPER_TABLE Obtener la super tabla directa de la tabla. PDO::CUBRID_SCH_PRIMARY_KEY PDO::CUBRID_SCH_IMPORTED_KEYS PDO::CUBRID_SCH_EXPORTED_KEYS PDO::CUBRID_SCH_CROSS_REFERENCE Tabla de contenidos DSN de PDO_CUBRID Conectar con bases de datos de CUBRID PDO::cubrid_schema Obtiene la informacin del esquema solicitada Funciones de Microsoft SQL Server y Sybase (PDO_DBLIB) Introduccin Advertencia Esta extensin es EXPERIMENTAL. Esto significa que el comportamiento de esta extensin, los nombres de sus funciones y todo lo documentado sobre esta extensin, puede cambiar en una futura edicin de PHP sin previo aviso. El uso de esta extensin queda bajo su propia responsabilidad. PDO_DBLIB es un controlador que implementa la interfaz de objetos de datos de PHP (PDO) para habilitar el acceso desde PHP a bases de datos de Microsoft SQL Server y Sybase a travs de la biblioteca FreeTDS. Esta ya extensin no est disponible para Windows con PHP 5.3 o posterior. En Windows, se debera de usar SqlSrv, un controlador alternativo para MS SQL que est disponible desde Microsoft: http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx . Si no fuera posible usar SqlSrv, se puede utilizar el controlador PDO_ODBC para conectarse a bases de datos de Microsoft SQL Server y Sybase, ya que la biblioteca Windows DB-LIB nativa est anticuado, no es seguro con subprocesos y Microsoft ya no le proporciona soporte. Tabla de contenidos PDO_DBLIB DSN Conectarse a bases de datos de Microsoft SQL Server y Sybase Obtener la clave primaria de la tabla. Obtener las claves importadas de la tabla. Obtener las claves exportadas de la tabla. Obtener la relacin de referencia de las tablas a remolque.

PDO_DBLIB DSN

PDO::cubrid_schema

[edit] Last updated: Fri, 25 Jan 2013 add a noteUser Contributed Notes MS SQL Server (PDO) - [14 notes] up down 0 twilson at tridiumtech dot com 3 years ago Hopefully this will help someone who is having problems connecting to MSSQL. I was having a heck of a time trying to get my dev server to connect to a remote MSSQL 2005 box. When using PDO like so: <?php $mssql = new PDO('dblib:host=<host>;dbname=<dbname>','<user>','<password>'); ?> I was receiving the message: Adaptive Server is unavailable or does not exist And mssql_connect() simply told me "Could not connect to server" I tried everything, different configuration options for FreeTDS/PHP, different versions, etc. But the answer was one line in php.ini: mssql.secure_connection = Off This line, which defaults to Off, needs to be ON if you are using NT authentication: mssql.secure_connection = On

Here is my build: FreeTDS-0.82 configured like: ./configure --with-tdsver=8.0 --enable-msdblib --with-gnu-ld PHP 5.2.11 configured like: ./configure --with-mssql=/usr/local --with-pdo-dblib=/usr/local [other options] Running on Apache/2.2.13 (Unix / Linux) Feel free to email me if you need help as I've spent 20+ hours reading and fiddling with this issue, so I'm very familiar with it now. Peace, Tom up down 0 ian at helastel dot com 6 months ago For people with issues inserting UTF-8 / Unicode data using DBLIB, you can't do this natively - but you can workaround the problem by converting the data first. e.g. inserting into a nvarchar column with collation Latin1_General_CI_AS ... $res = $db->prepare($sql); $res->bindValue(':value', iconv('UTF-8', 'ISO8859-1', $value); ... up down 0 TomF 1 year ago Note that you must connect with an MS SQL user - FreeTDS does not seem to like active directory linked users. up

down 0 meltir at meltir dot com 2 years ago Keep in mind the limitation sql server imposes on clients using the connection methods that dblib uses: no ntext column values can be transmitted, you will get an insightfull '4004' error when trying. The full text of the error is: Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. For more info on errors that mssql might throw at you, please see: http://msdn.microsoft.com/en-us/library/aa937595%28v=SQL.80%29.aspx up down 0 xwisdom at gmail dot com 2 years ago Here's how to call a stored procedure from MS SQL Server: <?php $return = null; $param1 = 'value1'; $param2 = 'value2'; $ds = $db->prepare('{? = call ?,?}'); $ds->bindParam(1, $return, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT,4); $ds->bindParam(2, $param1, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT,4); $ds->bindParam(3, $param2, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT,4);

$ds->execute(); ?> up

down 0 dpassey at everettsd dot org 3 years ago For PDO MSSQL connection issues, ensure that you have the updated version of ntwdblib.dll (currently 8.00.194 as of this post). Overwrite the existing (old) file or place it in the Windows system32 folder. The version that ships with PHP 5.2.X does not work. This is a well known issue apparently, but I had a really hard time finding information on this issue until I was able to lock in a file name. I hope that this helps someone. up down 0 tris+php at tfconsulting dot com dot au 3 years ago If you are struggling with 'Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier.' when trying to do 'SELECT *' queries: Obviously the best way to deal with this is change your unicode fields to the ascii equivalent (ntext > text), but if that is not an option here is an implementation based on the info athttp://www.rochester.edu/IT/web/WebHelp/mssql/limitations.html which checks the data types of the fields and casts them as neccesary. <?php class mssql { private static $statement=null; private static $typemap=array( 'ntext' => 'text', 'bigint' => 'real', 'decimal' => 'real', 'float' => 'real', 'numeric' => 'real' );

public static function all_fields($table) { if(self::$statement==null) { $db=pdodb::instance(); // or however you get your global instance $query="SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=?"; self::$statement=$db->prepare($query); } self::$statement->execute(array($table)); $fields=array(); $need_cast=false; while($field=self::$statement->fetch()) { $field_quoted=self::quote_field($field['COLUMN_NAME']); if(isset(self::$typemap[$field['DATA_TYPE']])) { $fields[]='CAST('.$field_quoted.' AS '.self::$typemap[$field['DATA_TYPE']].') AS '.$field_quoted; $need_cast=true; } else $fields[]=$field_quoted; } return ($need_cast) ? implode(', ',$fields) : '*'; } public static function quote_field($field) { $pos=strpos($field,' '); return ($pos===false) ? $field : '['.$field.']'; } } $db=pdodb:instance(); // singleton PDO instance $stmt=$db->prepare('SELECT '.mssql::all_fields('My_Table').' FROM My_Table'); $stmt->execute(); ... ?> Essentially mssql::all_fields($table) returns '*' if it can, otherwise the fields listed with the relevant casts in place e.g. 'NoteIdent, Owner, CAST(Note AS text) AS Note'

up down 0 Bryan 4 years ago To enable the mssql PDO driver under windows you need to: 1) uncomment the "extension=php_pdo_mssql.dll" line from php.ini 2) copy ntwdblib.dll into the directory where you have installed php up down 0 mrshelly at hotmail dot com 4 years ago to connect MS SQL2005(DE) sample code: notice: if u used MSSQL 2005 EXPRESS, must set the instence name 'SQLEXPRESS' just like $hostname='127.0.0.1\SQLEXPRESS'; <?php try { $hostname = "host"; $dbname = "dbname"; $username = "user"; $pw = "pass"; //host //db name // username like 'sa' // password for the user

$dbh = new PDO ("mssql:host=$hostname;dbname=$dbname","$username","$pw"); } catch (PDOException $e) { echo "Failed to get DB handle: " . $e->getMessage() . "\n"; exit; } $stmt = $dbh->prepare("SELECT * FROM table"); $stmt->execute(); while ($row = $stmt->fetch()) { print_r($row);

} unset($dbh); unset($stmt); ?> up down 0 Steve H 6 years ago To connect to SQL Server 2005 Express on Windows, do it like this: $pdo = new PDO ('mssql:host=localhost,1433;dbname=[redacted]', '[redacted]', '[redacted]'); localhost localhost\SQLEXPRESS localhost\1433 localhost:1433 will not work on Windows. localhost,1433 does work. YMMV on other OS's; try each. Also make sure your TCP/IP Properties -> IP Addresses are correct under SQL Server Configuration Manager. up down 0 support at converters dot ru 7 years ago If You work with MSSQL Server 7.0/2000/... under Windows and use non latin Encoding then better To use PDO_MSSQL until PDO_ODBC bugs will be fixed (MSSQL ext far more stable and usabe for PHP versions <=5.1.2). If your MSSQL connection use strings in OEM encoding (cp866 for russian charset)

1. Run Microsoft Server/Client Network Utility on work PC and UNCHECK "DBLibrary options"/"Automatic ANSI to OEM conversion" 2. Restart Web server if needed. up down 0 graham1 dot simpson at hsbcib dot com 7 years ago There is currently little sybase related PDO docs out there. The ones that I found often mention a spec for a dsn that is invalid. Here's how I am currently connecting to sybase ASE: 1. Compile up freetds http://www.freetds.org on top of open client; 2. Add the PDO and PD_DBLIB modules to php 5 as per the documentation; Note: I'm currently using the PDO-beta and PDO_DBLIB-beta; 3. Check mods installed ok using "pear list" and "php -m"; The documentation often says to use "sybase:" as your DSN, this doesn't work. Use "dblib:" instead. Here's an example: <?php try { $hostname = "myhost"; $port = 10060; $dbname = "tempdb"; $username = "dbuser"; $pw = "password"; $dbh = new PDO ("dblib:host=$hostname: $port;dbname=$dbname","$username","$pw"); } catch (PDOException $e) { echo "Failed to get DB handle: " . $e->getMessage() . "\n"; exit; } $stmt = $dbh->prepare("select name from master..sysdatabases where name = db_name()");

$stmt->execute(); while ($row = $stmt->fetch()) { print_r($row); } unset($dbh); unset($stmt); ?> Hope this helps. up down -1 Matej 2 years ago How to use mssql pdo on PHP 5.3 on IIS 7 (Windows Server 2008) 1. Installation of MSSQL driver for PHP: Download Microsoft Drivers for PHP for SQL Server Microsoft Drivers for PHP for SQL Server - SQLSRV20.EXE - http://www.microsoft.com/downloads/en/details.aspx ?FamilyID=80e44913-24b4-4113-8807-caae6cf2ca05) Copy php_sqlsrv_53_ts_vc9.dll and php_pdo_sqlsrv_53_ts_vc9.dll to php extension directory 2. configure php.ini to work with MSSQL PDO extension=php_sqlsrv_53_ts_vc9.dll extension=php_pdo_sqlsrv_53_ts_vc9.dll 3. configure configuration 'connectionString' => 'sqlsrv:server=hostname_or_ip;Database=database_name;', Funciones de Firebird/Interbase (PDO_FIREBIRD) Introduccin PDO_FIREBIRD es un controlador que imlementa la interfaz de Objetos de datos de PHP (PDO) para habilitar el acceso desde PHP a bases de datos de Firebird e Interbase. Instalacin Use --with-pdo-firebird[=DIR] para instalar la extensin PDO Firebird, donde [=DIR] es el directorio base de intalacin de Firebird.

$ ./configure --with-pdo-firebird Constantes predefinidas Estas constantes estn definidas por este controlador, y estarn disponibles slo cuando la extensin haya sido compilada con PHP, o bien sea cargada dinmicamente en ejecucin. Adems, estas constantes especficas del controlador deberan ser utilizadas slo si est usando este controlador. Usar atributos especficos del controlador con otro controlador podra resultar en un comportamiento inesperado. PDO::getAttribute() puede ser empleado para obtener el atributo PDO_ATTR_DRIVER_NAME para verificar el controlador, si el cdigo puede ejecutarse con mltiples controladores. PDO::FB_ATTR_DATE_FORMAT (integer) Establece el formato de fecha. Disponible desde PHP 5.3.0. PDO::FB_ATTR_TIME_FORMAT (integer) Establece el formato de hora. Disponible desde PHP 5.3.0. PDO::FB_ATTR_TIMESTAMP_FORMAT (integer) Establece el formato de marca de tiempo. Disponible desde PHP 5.3.0. Tabla de contenidos PDO_FIREBIRD DSN Conectarse a bases de datos de Firebird e Interbase

PDO_FIREBIRD DSN

PDO_DBLIB DSN

[edit] Last updated: Fri, 25 Jan 2013 add a noteUser Contributed Notes Firebird/Interbase (PDO) - [6 notes] up down 1 ritsaert at continuit dot nl 7 years ago The connection string for a firebird PDO connection is different than described above. It is something like: $DB = new PDO("firebird:dbname=T:\\Klimreg.GDB", "SYSDBA", "masterkey");

after dbname= the default connection string for Interbase and Firebird databases is used as presented to either gds32.dll or fbclient.dll. up down 0 confik at gmail dot com 1 year ago Here's the quick guide how to compile pdo_firebird and run tests for the ubuntu: 1) setup firebird superclassic: $ sudo apt-get install firebird2.5-superclassic firebird2.5-dev firebird2.5-examples superclassic is the server itself (if in doubt, read this:http://www.firebirdsql.org/file/documentation/reference_manuals/user_manuals/htm l/qsg25-classic-or-super.html), dev package contains headers to compile pdo stuff, examples contains example db, i used it to run tests in it. Set up credentials for the server (see the link lower). Get employee.fdb as written here http://www.firebirdsql.org/manual/ubusetup.html to a some known and writable path by your user (which tests will be run on). 2) make sure to compile php with following flags, you'll need interbase too (some tests in pdo_firebird/tests need it) ./configure --enable-pdo --with-pdo-firebird --with-interbase make 3) Run tests with environment variables that can be found in ext/pdo_firebird/tests/common.phpt, I ran it like this: $ PDO_FIREBIRD_TEST_DSN='firebird:dbname=/var/lib/firebird/2.5/data/employee.fdb' PDO_FIREBIRD_TEST_USER='SYSDBA' PDO_FIREBIRD_TEST_PASS='masterkey' TEST_PHP_EXECUTABLE=auto php -n ./run-tests.php ext/pdo_firebird You're done! up down 0

mark-php at vectrex dot org dot uk 5 years ago If you have a database alias on the server "localhost" called "test.fdb", you can do: $conn = new PDO("firebird:dbname=localhost:test.fdb", 'SYSDBA','letmein'); Note that as of the time of writing, the Firebird driver doesn't correctly throw an exception on connection error http://bugs.php.net/bug.php?id=41522 up down 0 Darren 6 years ago After much trial and error i found out you should use the following to connect to a firebird database: <?php $db = new PDO ("firebird:dbname=localhost:C:\\path\\to\\database\\MyDatabase.FDB","usern ame", "password"); ?> NOTE: in the 1st part of the connection string there can be NO spaces else you will get NULL. The string provided on this site does not work and will give no error only NULL. up down 0 thomas at last-it dot de 6 years ago if youre dsn syntax is wrong, see ritsaert's comment, there maybe no errormessage! up down -1 Anonymous 3 months ago

After two days of trouble with no visibile issues, when rebooting the system two popups come up: PHP Startup: Unable to load dynamic library 'c:/wamp/bin/php/php.5.3.13/ext/php_interbase.dll' - %1 non un'applicazione di Win32 valida. PHP Startup: Unable to load dynamic library 'c:/wamp/bin/php/php.5.3.13/ext/php_pdo_firebird.dll' - %1 non un'applicazione di Win32 valida. I've just re-installed wampserver (http://www.wampserver.com/en/) and all seems run well. To see if your Firebird PDO driver runs well: <?php foreach(PDO::getAvailableDrivers() as $driver) { echo $driver.'<br />'; }?> Funciones de IBM (PDO_IBM) Introduccin PDO_IBM es un controlador que implementa la interfaz de Objetos de datos de PHP (PDO) para habilitar el acceso desde PHP a bases de datos de IBM. Instalacin Para construir la extensin PDO_IBM, DB2 Client v9.1 o posterior debe estar instalado en el mismo sistema que PHP. DB2 Client se puede descargar Desde el Sitio de desarrollo de aplicaciones de IBM. Nota: Nota DB2 Client v9.1 o posterior da soporte al acceso directo de DB2 para servidores Linux, UNIX, y Windows v8 y v9.1. DB2 Client v9.1 tambin da soporte para el acceso a DB2 UDB para i5 y DB2 UDB para servidores z/OS utilizando la adquisicin por separada del producto DB2 Connect. PDO_IBM es una extensin PECL, por lo que siga las instrucciones en Instalacin de extensiones PECL para instalar la extensin PDO_IBM. Ejecute el comando configure para que apunte a la ubicacin de los ficheros de cabecera y a las bibliotecas de DB2 como sigue:

bash$ ./configure --with-pdo-ibm=/path/to/sqllib[,shared] El valor predeterminado de configure es la variables de entorno DB2DIR. Tabla de contenidos DSN de PDO_IBM Conectarse a bases de datos de IBM Funciones de Informix (PDO_INFORMIX) Introduccin PDO_INFORMIX es un controlador que implementa la interfaz de Objetos de datos de PHP (PDO) para habilitar el acceso desde PHP a bases de datos de Informix. Instalacin Para construir la extensin PDO_INFORMIX, Informix Client SDK 2.81 UC1 o superior debe estar instalado en el mismo sistema que PHP. Informix Client SDK est disponible desde el Sitio de soporte de Informix de IBM. PDO_INFORMIX es una extensin PECL, por lo que siga las instrucciones en Instalacin de extensiones PECLpara instalar la extensin PDO_INFORMIX. Ejecute el comando configure para que apunte a la ubicacin de los ficheros de cabecera y las bibliotecas de Informix Client SDK como sigue: bash$ ./configure --with-pdo-informix=/path/to/SDK[,shared] El valor predetermiando de configure es la variable de entorno INFORMIXDIR. Cursores desplazables PDO_INFORMIX admite los cursores desplazables; sin embargo, estos no estn habilitados de forma predeterminada. Para habilitar el soporte de cursores desplazables, se debe establecerENABLESCROLLABLECURSORS=1 en los ajustes de conexin de ODBC correspondientes en odbc.ini, o pasar la clusula EnableScrollableCursors=1 en la cadena de conexin de DSN. Tabla de contenidos DSN de PDO_INFORMIX Conectarse a bases de datos de Informix

DSN de PDO_INFORMIX

DSN de PDO_IBM

[edit] Last updated: Fri, 25 Jan 2013 add a noteUser Contributed Notes Informix (PDO) - [5 notes] up down

0 rdutan at aplext dot com 10 months ago tip: in fedora 16 you must set INFORMIXDIR in /etc/sysconfig/httpd example: INFORMIXDIR=/home/informix export INFORMIXDIR up down 0 dan at mutagenix dot org 3 years ago I've just built PHP 5.2.11 with pdo_informix support on Slackware 13.0. I had to use the following options in order to disable pdo from being compiled in (notice the difference in the --without-pdo-sqlite option from previous post): --disable-pdo option --without-pdo-sqlite option I also could not use the --with-sigchild option which caused problems with phpize. This fixed the informix -11001 error that I was getting. I was also getting an informix -23101 error (something about locale mismatches), but it was because I was not completely removing the compiled in pdo support. I then had to; rm -rf /usr/lib/php/.channels pear update-channels pecl install --alldeps pdo_informix pdo_mysql pdo_sqlite. There were other, smaller issues, but that is the lion's share. up down 0 cwgraven at gmail dot com 4 years ago

I noticed that SQLite is installed by php by default...oh and it happens to use PDO. So dont forget to use --without-sqlite. My successful config looks like this: ./configure --with-mysql --with-apxs=/usr/local/apache/bin/apxs --with-curl --with-xsl --disable-pdo --without-sqlite up down 0 dbeecher at tekops dot com 4 years ago Solved the issue with PHP 5.2.4 and others. The embedded PDO in php since 5.1+ is INCOMPATIBLE with the latest PDO_MYSQL and PDO_INFORMIX, etc. I just spent 2 days working on this. This solution works on numerous versions of Linux I've tried as well as SunOS and HPUX. The basic issue, getting this message when running PHP with PDO and trying to get PDO_INFORMIX working, but having a version conflict: "PHP Fatal error: PDO: driver informix requires PDO API version 20060409; this is PDO version 20060511 in Unknown on line 0" The "embedded" PDO that is within PHP since version 5.1 CONFLICTS with the PDO the PEAR/PECL modules are expecting. 1) Rebuild PHP with no pdo (--disable-pdo) (and you can't have any stuff like --with-mysql-pdo, either) 2) Then use PEAR/PECL to install PDO: pear install pdo 3) then use PEAR/PECL to install PDO_INFORMIX: pear install --alldeps pdo_informix 4) make sure your php.ini extensions_dir points to the directory where these are placed 5) then add these references to php.ini: extensions=pdo.so extensions=pdo_informix.so

extensions=pdo_mysql.so (etc.) 6) run php -v now and you should not see any errors. 7) run "pear list" and "pecl list" to see the installed modules 8) run php -i |egrep "pdo|PDO" to see: php -i |egrep "pdo|PDO" Configure Command => './configure' '--disable-pdo' '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-openssl=/usr' '--enable-force-cgi-redirect' '--with-gd' '--with-jpeg-dir=/usr/lib' '--with-zlib' '--enable-bcmath' '--enable-mbstring=all' '--with-curl' PDO PDO support => enabled PDO drivers => mysql, informix pdo_informix pdo_informix support => enabled pdo_mysql PDO Driver for MySQL, client library version => 5.0.51a I would have tried the embedded PDO and then also --with-informix-pdo=shared but as an earlier post here showed, the --with-informix... is unknown. Please correct my mistake if I am mistyping it. GOOD LUCK! David up down 0 alan dot acosta at gps dot com dot co 5 years ago Take care, with php-5.2.4 --with-pdo-informix=shared,/home/informix doesn't work, just says: Notice: Following unknown configure options were used: --with-pdo-informix=shared,/home/informix

Funciones de MySQL (PDO_MYSQL) Introduccin PDO_MYSQL es un controlador que implementa la interfaz de Objetos de Datos de PHP (PDO) para permitir el acceso de PHP a bases de datos de MySQL 3.x, 4.x y 5.x. PDO_MYSQL aprovechar el soporte nativo de sentencias preparadas presente en MySQL 4.1 y superior. Si se utiliza una versin anterior de las bibliotecas cliente de MySQL, PDO las emular. Advertencia Algunos tipos de tablas (motores de almacenamiento) de MySQL no admiten transacciones. Cuando se escribe cdigo de base de datos transaccional usando un tipo de tabla que no soporta transacciones, MySQL aparentar que se inici una transaccin xito. Adems, cualquier consulta DDL ejecutada consignar implcitamente cualquier transaccin pendiente. Instalacin Utilice --with-pdo-mysql[=DIR] para instalar la extensin PDO MySQL, donde la opcin [=DIR] es el directorio base de la instalacin de MySQL. Si a [=DIR] se le pasa mysqlnd, entonces ser utilizado el controlador nativo de MySQL. Opcionalmente, --with-mysql-sock[=DIR] establece la ubicacin del puntero del socket de unix de MySQL para todas las extensiones de MySQL, incluyendo PDO_MYSQL. Si no se especifica, se buscar en las ubicaciones predeterminadas. Opcionalmente, --with-zlib-dir[=DIR] se utiliza para establecer la ruta para el prefijo de instalacin de libz. $ ./configure --with-pdo-mysql --with-mysql-sock=/var/mysql/mysql.sock El soporte para SSL se habilita mediante las constantes de PDO_MySQL apropiadas, lo cual es equivalente a llamar a la funcin mysql_ssl_set() de la API en C de MySQL. Asimismo, SSL no se puede habilitar conPDO::setAttribute, debido a que la conexin ya existe. Vase tambin la documentacin de MySQL sobre conectarse a MySQL con SSL. Historial de cambios Versin Descripcin 5.4.0 5.3.9 5.3.7 Ya no se da soporte a las libreras cliente de MySQL 4.1 y anteriores. Agregado el soporte para SSL con mysqlnd y OpenSSL. Agregado el soporte para SSL con libmysql y OpenSSL.

Constantes predefinidas Estas constantes estn definidas por este controlador, y estarn disponibles slo cuando la extensin haya sido compilada con PHP, o bien sea cargada dinmicamente en ejecucin. Adems, estas constantes especficas del controlador deberan ser utilizadas slo si est usando

este controlador. Usar atributos especficos del controlador con otro controlador podra resultar en un comportamiento inesperado. PDO::getAttribute() puede ser empleado para obtener el atributo PDO_ATTR_DRIVER_NAME para verificar el controlador, si el cdigo puede ejecutarse con mltiples controladores. MYSQL_ATTR_USE_BUFFERED_QUERY (integer) Si este atributo es definido como TRUE en PDOStatement, el controlador de MySQL usar las versiones de la API de MySQL guardadas en el bfer. Si se est escribiendo cdigo portable, en su lugar se debera usar PDOStatement::fetchAll(). Ejemplo #1 Forzar consultas para que sean guardadas en el bfer en mysql <?php if ($bs->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') { $sentencia = $bs->prepare('select * from foo', array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true)); } else { die("mi aplicacin slo funciona con mysql; debera usar \$sentencia->fetchAll() en s u lugar"); } ?> MYSQL_ATTR_LOCAL_INFILE (integer) Activa LOAD LOCAL INFILE. Se ha de tener en cuenta que esta constante se puede usar solamente en el array driver_optionscuando se construye un nuevo gestor de base de datos. MYSQL_ATTR_INIT_COMMAND (integer) Comando a ejecutar cuando se conecta al servidor MySQL. Al reconectar se volver a ejecutar automticamente. Se ha de tener en cuenta que esta constante se puede usar solamente en el array driver_optionscuando se construye un nuevo gestor de base de datos. MYSQL_ATTR_READ_DEFAULT_FILE (integer) Lee las opciones desde el fichero indicado en lugar de my.cnf. Si se usa mysqlnd, esta opcin no est disponible debido a que mysqlnd no lee los fichero de configuracin de mysql. MYSQL_ATTR_READ_DEFAULT_GROUP (integer) Opciones de lectura del grupo indicado desde my.cnf o desde el fichero especificado conMYSQL_READ_DEFAULT_FILE. Si se usa mysqlnd, esta opcin no est disponible debido a que mysqlnd no lee los ficheros de configuracin de mysql. MYSQL_ATTR_MAX_BUFFER_SIZE (integer) Tamao mximo del bfer. Lo predeterminado es MiB. Esta constante no est admitida cuando se compila para mysqlnd.

MYSQL_ATTR_DIRECT_QUERY (integer) Realiza consultas directas, no usa setencias preparadas. MYSQL_ATTR_FOUND_ROWS (integer) Devuelve el nmero de filas encontradas (coindicentes), no el nmero de filas modificadas. MYSQL_ATTR_IGNORE_SPACE (integer) Permite espacios despus de los nombres de funcin. Hace de todos los nombres de funcin palabras reservadas. MYSQL_ATTR_COMPRESS (integer) Activa la compresin de comunicacin de red. Esta constante no est admitida cuando se compila para mysqlnd. MYSQL_ATTR_SSL_CA (integer) La ruta al fichero de la autoridad certificadora SSL. Existe a partir de PHP 5.3.7. MYSQL_ATTR_SSL_CAPATH (integer) La ruta al directorio que contiene los certificados AC SSL autorizados, los cuales estn almacenados en formato PEM. Existe a partir de PHP 5.3.7. MYSQL_ATTR_SSL_CERT (integer) La ruta al fichero del certificado SSL. Existe a partir de PHP 5.3.7. MYSQL_ATTR_CIPHER (integer) Una lista de uno o ms cifradores permisibles a usar para la encriptacin SSL, en un formato entendido por OpenSSL. Por ejemplo: DHE-RSA-AES256-SHA:AES128-SHA Existe a partir de PHP 5.3.7. MYSQL_ATTR_KEY (integer) La ruta al fichero de la clave SSL. Existe a partir de PHP 5.3.7. Configuracin en tiempo de ejecucin El comportamiento de estas funciones se ve afectado por la configuracin de php.ini. Opciones de configuracin de PDO_MYSQL Nombre Por defecto Cambiable PHP_INI_SYSTEM PHP_INI_SYSTEM

pdo_mysql.default_socket "/tmp/mysql.sock" pdo_mysql.debug un ajuste de configuracin. NULL

Para ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede realizar He aqu una breve explicacin de las directivas de configuracin.

pdo_mysql.default_socket string Establece un socket de dominio Unix. Este valor se puede establecer en tiempo de compilacin si un socket de dominio se encuentra en la configuracin. Este ajuste ini es slo de Unix. pdo_mysql.debug boolean Activa la depuracin de PDO_MYSQL. Este ajuste solo est disponible cuando PDO_MYSQL est compilado para mysqlnd y en el modo de depuracin de PDO. Tabla de contenidos PDO_MYSQL DSN Conectarse a bases de datos de MySQL

PDO_MYSQL DSN

DSN de PDO_INFORMIX

[edit] Last updated: Fri, 25 Jan 2013 add a noteUser Contributed Notes MySQL (PDO) - [11 notes] up down 1 david at manifestwebdesign dot com 1 year ago The SSL options are silently ignored in PHP 5.3.8, see https://bugs.php.net/bug.php? id=55870 Looks like it's addressed upstream, I just want to save others the hour and a half I just wasted :) up down 1 curt at webmasterbond dot com 1 year ago Today's PHP snapshot now has SSL support for PDO. Follow the directions here (http://dev.mysql.com/doc/refman/5.0/en/secure-create-certs.html ) to set up MySQL and then use the following connection options: <?php $pdo = new PDO( 'mysql:host=hostname;dbname=ssldb',

'username', 'password', array( PDO::MYSQL_ATTR_SSL_KEY PDO::MYSQL_ATTR_SSL_CA ) ); ?> up down 1 brian at diamondsea dot com 4 years ago SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. ... After spending hours trying to track down why we were getting this error on a new server, after the same code ran fine on other servers, we found the problem to be an old MySQL _client_ library running on our web server, and a latest-version MySQL _server_ running on the database server's box. Upgraded the MySQL client on the web server to the current revision and the problem went away. up down 1 konrads dot smelkovs at gmail dot com 5 years ago A note for the eager: There is no way how to get returned row count from an executed prepared statement without fetching the rows. up down 1 davey at php dot net 5 years ago =>'/path/to/client-key.pem', =>'/path/to/ca-cert.pem' PDO::MYSQL_ATTR_SSL_CERT=>'/path/to/client-cert.pem',

To use "PDO::MYSQL_ATTR_USE_BUFFERED_QUERY" you should call PDO::setAttribute("PDO::MYSQL_ATTR_USE_BUFFERED_QUERY", true); It will not work when passed into PDO::prepare() - Davey up down 1 dibakar at talash dot net 6 years ago PDO is much better option for calling procedures, views or triggers of mysql 5.x versions from PHP instead of using mysqli extension. Following is a simple demo script which can help anybody on how to call and use mysql procedures through php try { $dbh = new PDO('mysql:host=xxx;port=xxx;dbname=xxx', 'xxx', 'xxx', array( PDO::ATTR_PERSISTENT => false)); $stmt = $dbh->prepare("CALL getname()"); // call the stored procedure $stmt->execute(); echo "<B>outputting...</B><BR>"; while ($rs = $stmt->fetch(PDO::FETCH_OBJ)) { echo "output: ".$rs->name."<BR>"; } echo "<BR><B>".date("r")."</B>"; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } up down 0

miller_kurt_e at yahoo dot com 4 years ago SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. ... This one can be a royal pain to deal with. Never stack statements to be executed in one go. Nobody ever mentions this possibility in all the posts I've seen dealing with this error. This example is a Zend Framework example but the theory is the same. As in: <?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=ARCHIVE COMMENT='ticket archive'; 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=ARCHIVE COMMENT='request archive'; 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=ARCHIVE COMMENT='relay archive'; ____SQL; $result = $this->db->getConnection()->exec($sql); ?> This will run fine but PDO will balk with the 'unbuffered' error if you follow this with another query. Instead do: <?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=ARCHIVE COMMENT='ticket archive'; ____SQL; $result = $this->db->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=ARCHIVE COMMENT='request archive';

____SQL; $result = $this->db->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=ARCHIVE COMMENT='relay archive'; ____SQL; $result = $this->db->getConnection()->exec($sql); ?> Chopping it into individual queries fixes the problem. up down 0 practicegoodtheory at gmail dot com 4 years ago On Windows, with Apache, it would not load php_pdo_mysql.dll until I put libmysql.dll in Apache's dll path (e.g. apache/bin) up down 0 rmottey at gmail dot com 5 years ago I have been getting the error below when performing multiple queries within a single page. Setting the attribute below did not seem to work for me. So building on previous example i am initilizing my stmt variable on every query and a fetch all into an array. Seems to be working for me.

Error: PDO Error 1.1: Array ( [0] => xxx[1] => yyy[2] => Lost connection to MySQL server during query ) Fix: (PDO::setAttribute("PDO::MYSQL_ATTR_USE_BUFFERED_QUERY", true);) <? try { $dbh = new PDO('mysql:host=xxx;port=xxx;dbname=xxx', 'xxx', 'xxx', array( PDO::ATTR_PERSISTENT => false)); $stmt = $dbh->prepare("CALL getname()"); // call the stored procedure $stmt->execute(); // fetch all rows into an array. $rows = $stmt->fetchAll(); foreach ($rows as $rs) { $id = $rs['id']; } //initilise the statement unset($stmt); $stmt = $dbh->prepare("call secondprocedure(?);"); $stmt->bindValue(1, $id); if ( ! $stmt->execute() ) { echo "PDO Error 1.1:\n"; print_r($stmt->errorInfo()); exit; } unset($stmt); } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die();

} ?> up down -1 marty at excudo dot net 5 years ago Davey wrote: > To use "PDO::MYSQL_ATTR_USE_BUFFERED_QUERY" you should call > PDO::setAttribute("PDO::MYSQL_ATTR_USE_BUFFERED_QUERY", true); > >It will not work when passed into PDO::prepare() > > - Davey Almost correct. It should be: PDO::setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); so, without the quotes. otherwise it still won't work :) up down -2 bratwizard at yahoo dot com 5 years ago > konrads dot smelkovs at gmail dot com > 18-Jul-2007 03:39 > A note for the eager: >> There is no way how to get returned row count from an executed prepared statement without fetching the rows. Sure there is, just do something like this: if ($sth = $pdo->prepare($sql)) { $sth->execute($values); $sth->fetch();

// get count of rows in result set if ($sth_rc = $this->getDataset()->query('SELECT FOUND_ROWS()')) { $row_count = $sth_rc->fetchColumn(0); } } Funciones de Microsoft SQL Server (PDO_SQLSRV) Introduccin PDO_SQLSRV es un controlador que implementa la interfaz de Objetos de Datos de PHP (PDO) para habilitar el acceso desde PHP a bases de datos de MS SQL Server (comenzando con SQL Server 2005) y de SQL Azure. Instalacin La extesnin PDO_SQLSRV se habilitada aadiendo el fichero DLL apropiado al directorio de extensiones de PHP y la entrada correspondiente al fichero php.ini. La descarga de PDO_SQLSRV viene con ocho ficheros de controlador, cuatro de los cuales son para dar soporte a PDO. Si se est ejecutando PHP como no seguro con subprocesos (PHP 5.3), use el fichero php_pdo_sqlsrv_53_nts.dll. (Debera de usarse una versin no segura con subprocesos si se utiliza IIS como servidor web). Si se est ejecutando PHP como seguro con subprocesos, use el fichero php_pdo_sqlsrv_53_ts.dll. De manera similar para PHP 5.4, use php_pdo_sqlsrv_54_nts.dll o php_pdo_sqlsrv_54_ts.dll, dependiendo de si la instalacin de PHP no es o es segura con subprocesos. La versin ms reciente del controlador est disponible aqu: Descarga de SQLSRV 3.0. Si fuera necesario dar soporte paraor PHP 5.2 y/o PHP compilado con VC6, use la versin 2.0 del controlador: Descarga de SQLSRV 2.0. Para ms informacin sobre los requisitos del sistema, vase Requisitos del sistema de SQLSRV. La extensin PDO_SQLSRV solamente es compatible con PHP ejecutndose bajo Windows. Para Linux, vaseODBC y Microsoft's SQL Server ODBC Driver para Linux. Constantes predefinidas Estas constantes estn definidas por este controlador, y estarn disponibles slo cuando la extensin haya sido compilada con PHP, o bien sea cargada dinmicamente en ejecucin. Adems, estas constantes especficas del controlador deberan ser utilizadas slo si est usando este controlador. Usar atributos especficos del controlador con otro controlador podra resultar en un comportamiento inesperado. PDO::getAttribute() puede ser empleado para obtener el atributo PDO_ATTR_DRIVER_NAME para verificar el controlador, si el cdigo puede ejecutarse con mltiples controladores.

PDO::SQLSRV_TXN_READ_UNCOMMITTED (integer) Esta constante es un valor aceptable para la clave TransactionIsolation del DSN de SQLSRV. Esta constante establece el nivel de aislamiento para la conexin a Read Uncommitted. PDO::SQLSRV_TXN_READ_COMMITTED (integer) Esta constante es un valor aceptable para la clave TransactionIsolation del DSN de SQLSRV. Esta constante establece el nivel de aislamiento para la conexin a Read Committed. PDO::SQLSRV_TXN_REPEATABLE_READ (integer) Esta constante es un valor aceptable para la clave TransactionIsolation del DSN de SQLSRV. Esta constante establece el nivel de aislamiento para la conexin a Repeateable Read. PDO::SQLSRV_TXN_SNAPSHOT (integer) Esta constante es un valor aceptable para la clave TransactionIsolation del DSN de SQLSRV. Esta constante establece el nivel de aislamiento para la conexin a Snapshot. PDO::SQLSRV_TXN_SERIALIZABLE (integer) Esta constante es un valor aceptable para la clave TransactionIsolation del DSN de SQLSRV. Esta constante establece el nivel de aislamiento para la conexin a Serializable. PDO::SQLSRV_ENCODING_BINARY (integer) Specifies that data is sent/retrieved as a raw byte stream to/from the server without performing encoding or translation. This constant can be passed to PDOStatement::setAttribute, PDO::prepare, PDOStatement::bindColumn, and PDOStatement::bindParam. PDO::SQLSRV_ENCODING_SYSTEM (integer) Specifies that data is sent/retrieved to/from the server as 8-bit characters as specified in the code page of the Windows locale that is set on the system. Any multi-byte characters or characters that do not map into this code page are substituted with a single byte question mark (?) character. This constant can be passed to PDOStatement::setAttribute, PDO::setAttribute, PDO::prepare, PDOStatement::bindColumn, and PDOStatement::bindParam. PDO::SQLSRV_ENCODING_UTF8 (integer) Specifies that data is sent/retrieved to/from the server in UTF-8 encoding. This is the default encoding. This constant can be passed to PDOStatement::setAttribute, PDO::setAttribute, PDO::prepare, PDOStatement::bindColumn, and PDOStatement::bindParam.

PDO::SQLSRV_ENCODING_DEFAULT (integer) Specifies that data is sent/retrieved to/from the server according to PDO::SQLSRV_ENCODING_SYSTEM if specified during connection. The connection's encoding is used if specified in a prepare statement. This constant can be passed to PDOStatement::setAttribute, PDO::setAttribute, PDO::prepare, PDOStatement::bindColumn, and PDOStatement::bindParam. PDO::SQLSRV_ATTR_QUERY_TIMEOUT (integer) A non-negative integer representing the timeout period, in seconds. Zero (0) is the default and means no timeout. This constant can be passed to PDOStatement::setAttribute, PDO::setAttribute, and PDO::prepare. PDO::SQLSRV_ATTR_DIRECT_QUERY (integer) Indicates that a query should be executed directly, without being prepared. This constant can be passed to PDO::setAttribute, and PDO::prepare. For more information, see Direct and Prepared Statement Execution. Tabla de contenidos DSN de PDO_SQLSRV Conectar a bases de datos de MS SQL Server y de SQL Azure Funciones de Oracle (PDO_OCI) Introduccin Advertencia Esta extensin es EXPERIMENTAL. Esto significa que el comportamiento de esta extensin, los nombres de sus funciones y todo lo documentado sobre esta extensin, puede cambiar en una futura edicin de PHP sin previo aviso. El uso de esta extensin queda bajo su propia responsabilidad. PDO_OCI es un controlador que implementa la interfaz de Objetos de Datos de PHP (PDO) para habilitar el acceso desde PHP a bases de datos de Oracle a travs de la biblioteca OCI. Instalacin Utilice --with-pdo-oci[=DIR] para instalar la extensin PDO Oracle OCI, donde el opcional [=DIR] es el directorio base de la instalacin de Oracle. [=DIR] por defecto es la variable de entorno $ORACLE_HOME. Utilice --with-pdo-oci=instantclient,prefijo,versin para un cliente de la Instancia Oracle SDK, donde prefijo y versin se configuran. // Usando $ORACLE_HOME $ ./configure --with-pdo-oci // Usando OCI para Linux con la versin 10.2.0.3 con un prefijo /usr

$ ./configure --with-pdo-oci=instantclient,/usr,10.2.0.3 Tabla de contenidos DSN de PDO_OCI Conectar a bases de datos de Oracle

DSN de PDO_OCI

DSN de PDO_SQLSRV

[edit] Last updated: Fri, 25 Jan 2013 add a noteUser Contributed Notes Oracle (PDO) - [10 notes] up down 0 php at ideacode dot com 1 year ago If you're getting the "I'm too dumb to find oci.h" error, try creating a variety of paths. One variety uses just the major and minor of your OIC version (eg, 11.2 for 11.2.0.2) and another variety uses client64 as well as client. Something like this (for 11.2.0.2): ln -s /usr/include/oracle/11.2.0.2/ /usr/include/oracle/11.2 ln -s /usr/include/oracle/11.2/client /usr/include/oracle/11.2/client64 ln -s /usr/lib/oracle/11.2.0.2/ /usr/lib/oracle/11.2 ln -s /usr/lib/oracle/11.2/client /usr/lib/oracle/11.2/client64 This should cover your bases for 64-bit systems, as well as PHP patched to use the major.minor version number only. See also PHP bug #44989. up down 0 redlorry919 at gmail dot com 1 year ago Take note of the note at the top, this really is an experimental extension. I had a problem trying to read data from Oracle which resulted in some strange behaviour in PHP. i.e. foreach loops not ending, with no error messages. I also managed to get the data from Oracle into an array in PHP, but then couldn't return the array from a

function. After pulling my hair out for a day, it turned out to be a CLOB column in Oracle that caused the strange behaviour in PHP. I assume this extension doesn't fully support them. Instead I've typecast it within the SQL to a VARCHAR2 which seems to resolve it: SELECT CAST(columnx AS VARCHAR2(4000)) AS columnx ... It might help someone else having similar issues. up down 0 geompse at gmail dot com 2 years ago Notice the red block at the beginning of this page... pdo_oci is HIGHLY experimental. Even though it is under dev from 2004, it lakes today support for things that _do_ matters : - bind a varchar2 of 3500 chars - get selected metas - left join with blobs/clobs - etc. For the story, since we use pdo_pgsql in our software, I thought it would be viable to use pdo_oci for running under Oracle. After a long battle, I finally won : 1) If requested driver has a non-experimental pdo version available, use it. 2) else (well, for pdo_oci at least), use an abstraction layer of your own. 3) you're done. What I did in more details... 2 "main" classes for being compliant with "$obj instanceof PDO" or such : - class PhpDb extends PDO - class PhpDbStatement extends PDOStatement

2 "abstract" classes that defines what PDO actually does : - abstract class PhpDbAbstract - abstract class PhpDbAbstractStatement And at last for each driver, 2 classes doing the abstraction : - class PhpDbDriverOracle extends PhpDbAbstract - class PhpDbDriverOracleStatement extends PhpDbAbstractStatement "main" classes are accessed from your script, simply replace "new PDO" with "new PhpDb". "abstract" classes are mainly there for the documentation :p "driver" classes do the job in background, they are instances by the main classes. My PhpDb will be in an open source project sooner or later, search google or mail me ! up down 0 av01 at bugfix dot cc 2 years ago In order to get this compiled on my CentOS 5.4 x86_64 box, I had to do some extra settings that might be useful for others: Install oracle-instantclient11.2-basic and oracle-instantclient11.2-devel RPMs from Oracle Create some symbolic links because configure contains some outdated assumptions about path names and doesn't care about 64-bit systems: ln -s /usr/lib/oracle/11.2/client64 /usr/lib/oracle/11.2/client ln -s /usr/include/oracle/11.2/client64 /usr/lib/oracle/11.2/client/include Add the following to your configure command: --with-pdo-oci=shared,instantclient,/usr,11.2 up down 0 sixd at php dot net 3 years ago

From the PHP 5.3 UPGRADING file: - The PDO_OCI php_pdo_oci8.dll library (for use with Oracle version 8 client libraries) is no longer being built [with PHP 5.3]. Instead, use php_pdo_oci.dll (note no '8') with Oracle 10 or 11 client libraries. Connection to other database versions is still supported. up down 0 fernando dot wendt at gmail dot com 4 years ago To enable PDO support on PHP for Oracle Instant Client 11.1.x, you should follow the syntax above in the compile command, just as pointed by Andrew http://bugs.php.net/bug.php?id=39312,taking by default you have installed the OIC at /usr/lib/oracle (instant client and sdk at subfolder): ./configure --with-oci8=shared,instantclient,/usr/lib/oracle --with-pdo-oci=instantclient,/usr/lib/oracle,11.1 Just saying your release version from the Oracle OIC. It compiles fine then. Best regards. up down 0 ken at xpressconnex dot com 4 years ago Wow, cursade. That's a lot of typing to use the lite client. Try this: $db = '//hostname/servicename'; //e.g. '//192.168.1.1/orcl' $user = 'username'; $pass = 'password';

$conn = new PDO($db,$user,$pass); up down 0 moc.aciremi@yvelj 6 years ago A Statement of Warning: PDO::oci does not support REF CURSORS. This is mentioned nowhere (until now!) on this page. And now you know! If you want ref cursors avoid PDO for now. My Reference for this claim: http://www.oracle.com/technology/pub/articles/ php_experts/otn_pdo_oracle5.html GREAT article, excellent piece, really. It's not clear to me how old this document is, but it must have some dust on it, given it's references to "PHP5.1 ...' which is a little way off yet' " ... as of 2006-06-01, PHP5.1 has been with us for quite some time. up down 0 cursade at hotmail dot com 6 years ago if oracle and oracle instant client has been installed, without db in the same host For UNIX/LINUXset $LD_LIBRARY_PATH appent your instant client path and client/lib path to it, For windows set PATH like this

After set the path ,set TNS_ADMIN everioment ,point to where tnsnames.ora located. Then,you can use service name to connect to your Database Test coding <?php $param = $_POST; $db_username = "youusername"; $db_password = "yourpassword"; $db = "oci:dbname=yoursid"; $conn = new PDO($db,$db_username,$db_password); $name = $param['module']; $file = $param['file']; $stmt = $conn->exec("INSERT INTO AL_MODULE (AL_MODULENAME, AL_MODULEFILE) VALUES ('$name', '$file')"); ?> up down 0 cursade at hotmail dot com 6 years ago If instant client has been installed but the full oracle client not yet ,you can use pdo to connect to oracle database like following coding: <?php $tns = " (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yourip)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl)

) ) "; $db_username = "youname"; $db_password = "yourpassword"; try{ $conn = new PDO("oci:dbname=".$tns,$db_username,$db_password); }catch(PDOException $e){ echo ($e->getMessage()); } ?>

Funciones de ODBC y DB2 (PDO_ODBC) Introduccin PDO_ODBC es un controlador que implementa la interfaz de Objetos de datos de PHP (PDO) para habilitar el acceso desde PHP a bases de datos a travs de contorladores ODBC o de la biblioteca IBM DB2 Call Level Interface (DB2 CLI). PDO_ODBC admite actualmente tres "sabores" diferentes de controladores de bases de datos: ibm-db2 Da soporte para el acceso a servidores de IBM DB2 Universal Database, Cloudscape, y Apache a travs del cliente gratuito DB2. unixODBC Da soporte para el acceso a servidores de bases de datos a travs del administrador de gestores de unixODBC y de los controladores de ODBC proppietarios de bases de datos. generic Ofrece una opcin de compilacin para los administradores de gestores de ODBC que no estn admitidos explcitamente pore PDO_ODBC. En Windows, PDO_ODBC est construido dentor del ncleo de PHP de manera predeterminada. Est vinculado con Windows ODBC Driver Manager, por lo que PHP puede conectarse a cualquier base de datos catalogada en un DSN de sistema, y es el controlador recomendado para conectarse a bases de datos de Microsoft SQL Server. Instalacin PDO_ODBC en sistemas UNIX A partir de PHP 5.1, PDO_ODBC est incluido en los ficheros fuente de PHP. Se puede compilar la extensin PDO_ODBC como un mdulo esttico o compartido usando los siguientes comandosconfigure.

ibm_db2 ./configure --with-pdo-odbc=ibm-db2,/opt/IBM/db2/V8.1/ Para contruir PDO_ODBC con el sabor ibm-db2, se han de tener instaladas previamente las cabeceras de desarrollo de aplicaciones de DB2 en la misma mquina en la que se compile PDO_ODBC. Las cabeceras de desarrollo de aplicaciones de DB2 son una opcin instalable en los servidores de DB2, y tambin estn disponibles como parte de DB2 Application Development Client, disponible para descargar gratuitamente desde el sitio de soporte de IBM DB2 Universal Database. Si no se proporciona una ubicacin para las bibliotecas y cabeceras de DB2 al comando configure, PDO_ODBC usar como valor predeterminado /home/db2inst1/sqllib. unixODBC ./configure --with-pdo-odbc=unixODBC,/usr/local Si no se proporciona una ubicacin para las bibliotecas y cabecerasd de unixODBC al comandoconfigure, PDO_ODBC usar como valor predetermiando /usr/local. generic ./configure --with-pdo-odbc=generic,/usr/local,libname,ldflags,cflags Configuracin en tiempo de ejecucin El comportamiento de estas funciones se ve afectado por la configuracin de php.ini. Opciones de configuracin de PDO_ODBC Nombre pdo_odbc.connection_pooling Por defecto "strict" Cambiable PHP_INI_ALL Historial de cambios Disponible desde PHP 5.1.0. Disponible desde PHP 5.1.1. Esta pdo_odbc.db2_instance_name NULL PHP_INI_SYSTEM caracterstica obsoleta ser eliminada con certeza en el futuro. Para ms detalles y definiciones de los modos de PHP_INI_*, vea Dnde se puede realizar un ajuste de configuracin. He aqu una breve explicacin de las directivas de configuracin. pdo_odbc.connection_pooling string Si agrupar conexiones de ODBC. Se puede usar "strict", "relaxed" o "off" (que es igual a ""). El parmetro describe cmo de estricta debera ser el administrador de conexiones cuando coincidan los parmetros de conexin con conexiones existentes en la agrupacin. strict es el valor predetermiando recomendado, y dar como resultado en el uso de conexiones almacenadas en cach solamente cuando todos los parmetros de conexin coincidan exactamente. relaxed dar como resultado el uso de conexiones almacenadas en cach cuando

se utilicen parmetros de conexin similares. Esto puede resultar en el aumento del uso de la cach, con el riesgo de perder informacin de conexin entre (por ejemplo) hosts virtuales. Este ajuste solamente se puede cambiar desde el fichero php.ini, y afecta al proceso completo; cualquier otro mdulo dentro del proceso que utilice las mismas bibliotescas de ODBC tambin se ver afectado, incluyendo la Extensin ODBC Unificada. Advertencia relaxed no debera usarse en servidores compartidos, por razones de seguridad. Sugerencia Deje este ajuste a la configuracin strict predeterminada a menos que tenga una buena razn para cambiarlo. pdo_odbc.db2_instance_name string Si se compila PDO_ODBC usando el sabor db2, este ajuste establece el valor de la variable de entorno DB2INSTANCE en sistemas operativos Linux y UNIX al nombre especificado de la instancia de DB2. Tambin habilita PDO_ODBC para resolver la ubicacin de las bibliotecas de DB2 y realizar conexiones catalogadas a bases de datos DB2. Este ajuste solamente se puede cambiar desde el fichero php.ini, y afecta al proceso completo; cualquier otro mdulo dentro del proceso que utilice las mismas bibliotescas de ODBC tambin se ver afectado, incluyendo la Extensin ODBC Unificada. Este ajuste no tiene efecto en Windows. Tabla de contenidos DSN de PDO_ODBC Conectarse a bases de datos de ODBC o de DB2

DSN de PDO_ODBC

DSN de PDO_OCI

[edit] Last updated: Fri, 25 Jan 2013 add a noteUser Contributed Notes ODBC y DB2 (PDO) - [4 notes] up down 1 harry dot forum at p-boss dot com 2 years ago MSSQL - PHP on Apache - Linux Redhat When using php 5.2.10 please beaware of this error:

http://bugs.php.net/bug.php?id=42068 Standard odbc_connect will not work, you must use pdo_odbc Connecting to MSSQL using pdo odbc - walkthrough.. 1. Download and configure FreeTDS with-unixodbc ./configure --prefix=/opt/SYSfreetds --with-unixodbc make;make test; make install 2. install php-odbc and unixODBC php-odbc-5.2.10-1.x86_64.rpm unixODBC.x86_64.x86x64 3. Setup ODBC links a) Create a tds.driver file with the following contents [FreeTDS] Description Driver = v0.63 with protocol v8.0 = /opt/SYSfreetds/lib/libtdsodbc.so

Register the ODBC driver - the tds.driver file odbcinst -i -d -f tds.driver b) Creating a tds.datasource file - ODBC Data Source with contents: [SOURCENAME] Driver=FreeTDS Description=Test MS SQL Database with FreeTDS

Trace=No Server=BobTheServer Port=1433 TDS Version=8.0 Database=youDBname Register the ODBC data source odbcinst -i -s -f tds.datasource Beware that the odbc.ini file will be installed in the current users home directory. This may need to be used if you are using a webserver as the apache home directory could be different. Ensure .odbc.ini is in apaches home directory, possibly "/var/www" 4. Test the ODBC link on the command line isql -v SOURCENAME 'username' 'password' +---------------------------------------+ | Connected! | | sql-statement | help [tablename] | quit | SQL> 5. Edit /etc/php.ini Make sure the following is set: mssql.secure_connection = On | | | | | |

+---------------------------------------+

6. Restart apache gracefully

7. PHP to run: <? $dbh= new PDO('odbc:SOURCENAME', 'username', 'password'); $stmt = $dbh->prepare("$query"); $stmt->execute(); while ($row = $stmt->fetch()) { print_r($row); } unset($dbh); unset($stmt); ?> Trouble-shooting: Please try strace/ truss if you encounter issues. It could be you are referencing wrong libraries somewhere. Ensure you have restarted apache once the odbc files are in place up down 0 Ariz Jacinto 1 year ago Using SQL Server Native Client 11.0 on Linux as a PDO_ODBC driver: Download the SQL Server Native Client 11.0 on Linux ODBC Driver: http://www.microsoft.com/download/en/details.aspx?id=28160 Configuration ODBC: /usr/local/etc/odbcsys.ini -[SQL Server Native Client 11.0] Description = Microsoft SQL Server ODBC Driver V1.0 for Linux Driver = /opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1720.0 UsageCount = 1

/usr/local/etc/odbc.ini -[MSSQLServer] Driver = SQL Server Native Client 11.0 Description = Sample Database Trace = Yes Server = Port = 1433 Database = Test the connection: mssqltest.php -<?php putenv('ODBCSYSINI=/usr/local/etc'); putenv('ODBCINI=/usr/local/etc/odbc.ini'); $username = ""; $password = ""; try { $dbh = new PDO("odbc:MSSQLServer", "$username", "$password" ); } catch (PDOException $exception) { echo $exception->getMessage(); exit; } echo var_dump($dbh); unset($dbh); ?> up down 0 tuomas 3 years ago

If you want to avoid installing DB2 Connect and/or PECL modules ibm_db2 and PDO_IBM, you can also use IBM DB2 databases trough unixODBC. If you have DB2 database on a i server you need to install IBM iAccess (http://www.ibm.com/systems/i/software/access/linux/index.html) and unixODBC. Just install the libraries (rpm) and modify configurations in /etc/odbcinst.ini (sample configuration in /opt/ibm/iSeriesAccess/unixodbcregistration) and /etc/odbc.ini. To my experience this is much easier way than installing DB2 Connect. up down 0 ethan dot nelson at ltd dot org 4 years ago Using SQL 2005, PDO_ODBC and datetime fields is a royal pain. MSDN documentation on CAST CONVERT shows that there is supposed to be an implicit convert between character types and datetime types. That's true... until you put it in a stored procedure and use variable declarations. For instance this fails: declare @date varchar; SET @date = '20080101'; SELECT cast(@date AS datetime) AS poo While this succeeds: declare @date varchar(19); SET @date = '20080101'; SELECT cast(@date AS datetime) AS poo The PDO Driver appears to attempt an implicit conversion and so it fails whenever you try to insert data into datetime column types. So to workaround this nuance in SQL, declare a character column type with explicit width. Then your implicit type conversion will work. Funciones PostgreSQL (PDO_PGSQL)

Introduccin PDO_PGSQL es un controlador que implementa la interfaz PHP Data Objects (PDO) para permitir el acceso desde PHP a bases de datos PostgreSQL. Tipos de recursos Esta extensin define un recurso de secuencia retornado por PDO::pgsqlLOBOpen(). Instalacin Utilice --with-pdo-pgsql[=DIR] para instalar la extensin PDO PostgreSQL, donde el opcional [=DIR] es el directorio base de la instalacin de PostgreSQL, o la ruta a pg_config. $ ./configure --with-pdo-pgsql Tabla de contenidos PDO_PGSQL DSN Conectarse a bases de datos PostgreSQL PDO::pgsqlLOBCreate Crea un nuevo objeto grande PDO::pgsqlLOBOpen Abre un flujo de un objeto grande existente PDO::pgsqlLOBUnlink Elimina un objeto grande Funciones de SQLite (PDO_SQLITE) Introduccin PDO_SQLITE es un controlador que implementa la interfaz Objetos de Datos de PHP (PDO, siglas en ingls de PHP Data Objects) para habilitar el acceso a bases de datos de SQLite 3. En PHP 5.1, la extensin SQLite tambin proporciona un controlador para bases de datos de SQLite 2; aunque no es tcnicamente una parte del controlador PDO_SQLITE, se comporta de manera similar, por lo que est documentado codo con codo. El controlador SQLite 2 para PDO es proporcionado pricipalmente para hacer ms la importacin de ficheros de bases de datos atiguos de SQLite a una aplicacin que utilice el controlador SQLite 3 ms rpido y ms eficiente. Como consecuencia, el controlador SQLite 2 no tiene unas caractersticas tan ricas como el controlador SQLite 3. Nota: PDO_SQLITE permite usar cadenas aparte de flujos junto con PDO::PARAM_LOB. Instalacin El controlador PDO_SQLITE PDO est habilitado por omisin. Para deshabilitarlo, se puede usar --without-pdo-sqlite[=DIR] , donde el parmetro opcional [=DIR] es el directorio base de instalacin de sqlite. Tabla de contenidos PDO_SQLITE DSN Conectar a las bases de datos de SQLite PDO::sqliteCreateAggregate Registra una funcin acumuladora definida por el usuario para usarla en sentencias SQL

PDO::sqliteCreateFunction Registra una funcin definida por el usuario para utilizarla en sentencias SQL

PDO_SQLITE DSN

PDO::pgsqlLOBUnlink

[edit] Last updated: Fri, 25 Jan 2013 add a noteUser Contributed Notes SQLite (PDO) - [6 notes] up down 2 nospam8715 at dririan dot com 2 months ago Instead of compiling an old version of SQLite to create a database using an older database format that the version of SQLite bundled with PDO can handle, you can (much more easily) just run the query "PRAGMA legacy_file_format = TRUE;" BEFORE creating the database (if you have an existing database, run ".dump" from the sqlite shell on your database, run the sqlite shell on a new database, run the PRAGMA, then paste the contents of the .dump). That will ensure SQLite creates a database readable by SQLite 3.0 and later. up down 0 gmac63 at charter dot net 6 years ago Issue: Error: SQLSTATE[HY000]: General error: 1 unsupported file format Resolution: To solve this (and/or many issues) involving this type of error, I assumed the error to be generated from php. Well, it was to an extent. The sqlite pdo code offered the solution: I researched the error by grep'ing the php source code and found the error string to come from php-5.1.4/ext/pdo_sqlite/sqlite/src/prepare.c, lines 265:278 :

/* ** file_format==1 ** file_format==2 ** file_format==3 ** ** Version 3.0 can only use files with file_format==1. Version 3.1.3 ** can read and write files with file_format==1 or file_format==2. ** Version 3.1.4 can read and write file formats 1, 2 and 3. */ if( meta[1]>3 ){ sqlite3BtreeCloseCursor(curMain); sqlite3SetString(pzErrMsg, "unsupported file format", (char*)0); return SQLITE_ERROR; } This is interesting as I am running SQLite version 3.3.5 which the databases were created in. I see that the SQLite PDO source in the php source is : # cat ext/pdo_sqlite/sqlite/VERSION 3.2.8 My solution was then to find a version of sqlite that was =< 3.1.4. I found source for 3.1.3, compiled, recreated my database using that version (NOTE: the databases are unsupported between 3.1.x and 3.2.x versions of SQLite). Once I did this it worked. Also as a side note, to get SQLite compiled as a PDO, I had to: 1) configure with ... --enable-pdo=shared \ --with-sqlite=shared \ --with-pdo-sqlite=shared --with-zlib ... \ 'make && make install' if configure is successful. 2) Make sure the pdo libs were copied/installed to the correct directory. On my installation it was /usr/local/include/php/ext/pdo/ Version 3.0.0. Version 3.1.3. Version 3.1.4.

3) Make these changes in my php.ini: - change ' extension_dir = "./" ' to ' extension_dir="/usr/local/include/php/ext/pdo/" ' - add/edit in this order: extension=pdo.so extension=pdo_sqlite.so extension=sqlite.so 4) test php with : 'php -m' at the command line and solve any issues from there. Mostly php.ini config issues. Also restart the http service! up down 0 Duffalo 6 years ago Note that as of the date of this post, PDO_SQLITE will not interact with database files created with the current version of the SQLite console application, sqlite-3.3.6. It is currently necessary to obtain version 3.2.8, available from http://www.sqlite.org/ but only by entering the URI manually, as there is no link. Go tohttp://www.sqlite.org/download.html and find the URI of the version you're looking for, then make the appropriate version number substitution. up down 0 aidan at php dot net 7 years ago If you receive an error while trying to write to a sqlite database (update, delete, drop): Warning: PDO::query() [function.query]: SQLSTATE[HY000]: General error: 1 unable to open database The folder that houses the database file must be writeable. up down -1 Hayley Watson

1 year ago If there is anyone using PDO to interface with SQLite and wondering how to create an SQLite database to begin with; if they're thinking they'll have to detour into one of the other SQLite interfaces to get the job done - nope! PDO does need a SQLite database file to exist before it can connect, but that file can be a completely empty one; so a single touch() is enough to create a brand new virgin SQLite database ready to receive your CREATE TABLE statements. up down -1 gopal at gopalarathnam dot com 5 years ago If you get an error reporting "invalid resource" when trying to query the database table and looping through it, the version of the SQLite extension compiled in to PHP might be incompatible with the version that had created the database (like SQLite 2.x vs 3.x). The database open itself might be successful, failing only when querying. $dbh = new PDO('sqlite:/tmp/foo.db'); // success foreach ($dbh->query('SELECT * FROM bar') as $row) // prints invalid resource // ... Funciones de 4D (PDO_4D) Introduccin Advertencia Esta extensin es EXPERIMENTAL. Esto significa que el comportamiento de esta extensin, los nombres de sus funciones y todo lo documentado sobre esta extensin, puede cambiar en una futura edicin de PHP sin previo aviso. El uso de esta extensin queda bajo su propia responsabilidad. PDO_4D es un controlador que implementa la interfaz de Objetos de datos de PHP (PDO) para habilitar el acceso desde PHP a bases de datos de 4D. 4D es una plataforma integrada que acelera y simplifica el desarrollo y el despliegue de aplicaciones de negocios, utilizada en ms de 70 pases, mediante una comunidad de miles de desarrolladores y proveedores de soluciones verticales, con millones de usuarios finales en todo el mundo.

Ofreciendo un juego integrado de herramientas, tales como una base de datos relacional y transaccional ANSI SQL, un entorno de desarrollo grfico, un lenguaje de cuarta generacin con ms de 1000 comandos de alto nivel, un servidor HTTP interno, un servidor de aplicaciones, etc., 4D facilita la creacin y el mantenimiento de aplicaciones desde uno a miles de usuarios simultneos, ya sea en Windows, Mac o desde cualquier cliente web. 4D tambin es una plataforma abierta, ofreciendo una API completa para la creacin de complementos, incluyendo varios conectores que le permiten actuar como un sistema servidor o cliente para muchos entornos (Oracle mediante OCI, cliente o servidor SOAP, origen de datos Flex, todas las bases de datos ODBC, XML sobre HTTP, etc.) Adems de la capacidad de interactuar con aplicaciones 4D a travs de servicios web, ahora se puede acceder a las bases de datos de 4D directamente usando el controlador PDO_4D. Se pueden encontrar ms detalles sobre el entorno de desarrollo de 4D en http://www.4d.com/. Se sabe que PDO_4D funciona con las versiones 12 beta y siguientes de 4D, para Mac OS X y Windows. Las plataformas antiguas podran funcionar, pero no estn soportadas. Tabla de contenidos DSN de PDO_4D Conectarse a un servidor de 4D SQL Constantes para PDO_4D Constantes para PDO_4D Tipos de SQL con PDO_4D y PHP Tipos de SQL con PDO_4D y PHP SQL aceptado por 4D PDO y SQL 4D Ejemplos con PDO_4D Ejemplos con PDO_4D

S-ar putea să vă placă și