diff --git a/reference/pdo/pdo/quote.xml b/reference/pdo/pdo/quote.xml index 9a6353c339..f9f3ed632f 100644 --- a/reference/pdo/pdo/quote.xml +++ b/reference/pdo/pdo/quote.xml @@ -1,6 +1,5 @@ - - + PDO::quote @@ -83,6 +82,31 @@ + + &reftitle.changelog; + + + + + &Version; + &Description; + + + + + 8.5.0 + + Al usar el controlador SQLite, ahora se lanza una PDOException + o se emite una advertencia, según el modo de error, si el + string contiene un byte nulo; anteriormente el + string era truncado silenciosamente en el byte nulo. + + + + + + + &reftitle.examples; diff --git a/reference/pdo_sqlite/configure.xml b/reference/pdo_sqlite/configure.xml index 5699d2eb34..21c28cc765 100644 --- a/reference/pdo_sqlite/configure.xml +++ b/reference/pdo_sqlite/configure.xml @@ -1,18 +1,18 @@ - - +
&reftitle.install; - - El controlador PDO_SQLITE PDO está habilitado por omisión. Para deshabilitarlo, + + El controlador PDO_SQLITE PDO está habilitado por defecto. Para deshabilitarlo, se puede usar , donde el parámetro opcional [=DIR] es el directorio base de instalación de sqlite. - A partir de PHP 7.4.0 se requiere libsqlite ≥ 3.5.0. - Anteriormente, si libsqlite incluido podría haberse usado en su lugar, por omisión, - si [=DIR] era omitido. - + A partir de PHP 7.4.0 se requiere libsqlite ≥ 3.5.0, + y a partir de PHP 8.5.0 se requiere libsqlite ≥ 3.7.17. + Anteriormente, la libsqlite incluida podría haberse usado en su lugar, y era la + opción predeterminada, si se omitía [=DIR]. + Configuración adicional en Windows a partir de PHP 7.4.0 diff --git a/reference/pdo_sqlite/pdo-sqlite.xml b/reference/pdo_sqlite/pdo-sqlite.xml index 25777019bf..d29ef91894 100644 --- a/reference/pdo_sqlite/pdo-sqlite.xml +++ b/reference/pdo_sqlite/pdo-sqlite.xml @@ -1,6 +1,5 @@ - - + La clase Pdo\Sqlite Pdo\Sqlite @@ -53,9 +52,7 @@ &InheritedConstants; - - - + &Constants; @@ -100,19 +97,85 @@ int Pdo\Sqlite::ATTR_EXTENDED_RESULT_CODES + + public + const + int + Pdo\Sqlite::ATTR_BUSY_STATEMENT + + + public + const + int + Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT + + + public + const + int + Pdo\Sqlite::EXPLAIN_MODE_PREPARED + + + public + const + int + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN + + + public + const + int + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN + + + public + const + int + Pdo\Sqlite::ATTR_TRANSACTION_MODE + + + public + const + int + Pdo\Sqlite::TRANSACTION_MODE_DEFERRED + + + public + const + int + Pdo\Sqlite::TRANSACTION_MODE_IMMEDIATE + + + public + const + int + Pdo\Sqlite::TRANSACTION_MODE_EXCLUSIVE + + + public + const + int + Pdo\Sqlite::OK + + + public + const + int + Pdo\Sqlite::DENY + + + public + const + int + Pdo\Sqlite::IGNORE + &Methods; - - - + &InheritedMethods; - - - - - - + + @@ -170,8 +233,175 @@ + + Pdo\Sqlite::ATTR_BUSY_STATEMENT + + + Atributo de sentencia de solo lectura, recuperado con + PDOStatement::getAttribute, que es &true; si + la sentencia ha sido ejecutada y todavía tiene una fila pendiente, y &false; + en caso contrario. + Disponible a partir de PHP 8.5.0. + + + + + Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT + + + Atributo de sentencia que controla el modo de explicación, establecido con + PDOStatement::setAttribute. Los valores posibles son + Pdo\Sqlite::EXPLAIN_MODE_PREPARED, + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN y + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN. + Se lanza un ValueError si PHP ha sido compilado + con una versión de libsqlite anterior a 3.43.0. + Disponible a partir de PHP 8.5.0. + + + + + Pdo\Sqlite::EXPLAIN_MODE_PREPARED + + + Valor para Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT: + devuelve la sentencia tal como fue preparada (sin explicación). + Disponible a partir de PHP 8.5.0, cuando se compila con libsqlite >= 3.43.0. + + + + + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN + + + Valor para Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT: + devuelve los códigos de operación de la máquina virtual utilizada para ejecutar la sentencia + (equivalente al EXPLAIN de SQLite). + Disponible a partir de PHP 8.5.0, cuando se compila con libsqlite >= 3.43.0. + + + + + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN + + + Valor para Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT: + devuelve el plan de consulta (equivalente al + EXPLAIN QUERY PLAN de SQLite). + Disponible a partir de PHP 8.5.0, cuando se compila con libsqlite >= 3.43.0. + + + + + Pdo\Sqlite::ATTR_TRANSACTION_MODE + + + Atributo de conexión que configura el modo de transacción utilizado por + PDO::beginTransaction. Los valores posibles son + Pdo\Sqlite::TRANSACTION_MODE_DEFERRED, + Pdo\Sqlite::TRANSACTION_MODE_IMMEDIATE y + Pdo\Sqlite::TRANSACTION_MODE_EXCLUSIVE. + Disponible a partir de PHP 8.5.0. + + + + + Pdo\Sqlite::TRANSACTION_MODE_DEFERRED + + + Valor para Pdo\Sqlite::ATTR_TRANSACTION_MODE: + utiliza el modo de transacción DEFERRED de SQLite (el predeterminado). + Disponible a partir de PHP 8.5.0. + + + + + Pdo\Sqlite::TRANSACTION_MODE_IMMEDIATE + + + Valor para Pdo\Sqlite::ATTR_TRANSACTION_MODE: + utiliza el modo de transacción IMMEDIATE de SQLite. + Disponible a partir de PHP 8.5.0. + + + + + Pdo\Sqlite::TRANSACTION_MODE_EXCLUSIVE + + + Valor para Pdo\Sqlite::ATTR_TRANSACTION_MODE: + utiliza el modo de transacción EXCLUSIVE de SQLite. + Disponible a partir de PHP 8.5.0. + + + + + Pdo\Sqlite::OK + + + Valor de retorno de una retrollamada de autorización establecida con + Pdo\Sqlite::setAuthorizer, que permite la acción. + Disponible a partir de PHP 8.5.0. + + + + + Pdo\Sqlite::DENY + + + Valor de retorno de una retrollamada de autorización establecida con + Pdo\Sqlite::setAuthorizer, que deniega la acción. + Disponible a partir de PHP 8.5.0. + + + + + Pdo\Sqlite::IGNORE + + + Valor de retorno de una retrollamada de autorización establecida con + Pdo\Sqlite::setAuthorizer, que sustituye un valor &null; + por la columna que habría sido leída. + Disponible a partir de PHP 8.5.0. + + +
+ +
+ &reftitle.changelog; + + + + + &Version; + &Description; + + + + + 8.5.0 + + Se añadieron las constantes Pdo\Sqlite::ATTR_BUSY_STATEMENT, + Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT, + Pdo\Sqlite::EXPLAIN_MODE_PREPARED, + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN, + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN, + Pdo\Sqlite::ATTR_TRANSACTION_MODE, + Pdo\Sqlite::TRANSACTION_MODE_DEFERRED, + Pdo\Sqlite::TRANSACTION_MODE_IMMEDIATE, + Pdo\Sqlite::TRANSACTION_MODE_EXCLUSIVE, + Pdo\Sqlite::OK, + Pdo\Sqlite::DENY y + Pdo\Sqlite::IGNORE. + + + + + +
+ &reference.pdo-sqlite.pdo.entities.sqlite; diff --git a/reference/pdo_sqlite/pdo/sqlite/createcollation.xml b/reference/pdo_sqlite/pdo/sqlite/createcollation.xml index eb0bb2eb67..82fbb8f77b 100644 --- a/reference/pdo_sqlite/pdo/sqlite/createcollation.xml +++ b/reference/pdo_sqlite/pdo/sqlite/createcollation.xml @@ -1,6 +1,5 @@ - - + Pdo\Sqlite::createCollation @@ -64,6 +63,38 @@
+ + &reftitle.errors; + + Se lanza un TypeError si la + callback no devuelve un valor de tipo int. + + + + + &reftitle.changelog; + + + + + &Version; + &Description; + + + + + 8.4.0 + + Ahora se lanza un TypeError si la + callback no devuelve un valor de tipo int; + anteriormente el valor devuelto era convertido a int. + + + + + + + &reftitle.examples; diff --git a/reference/pdo_sqlite/pdo/sqlite/setauthorizer.xml b/reference/pdo_sqlite/pdo/sqlite/setauthorizer.xml new file mode 100644 index 0000000000..a97d692023 --- /dev/null +++ b/reference/pdo_sqlite/pdo/sqlite/setauthorizer.xml @@ -0,0 +1,167 @@ + + + + + Pdo\Sqlite::setAuthorizer + Configura una retrollamada para usarla como autorizador y limitar lo que puede hacer una sentencia + + + + &reftitle.description; + + public voidPdo\Sqlite::setAuthorizer + callablenullcallback + + + Establece una retrollamada que será invocada por SQLite cada vez que se realice + una acción (lectura, eliminación, actualización, etc.). Se utiliza cuando se prepara + una sentencia SQL de una fuente no confiable para garantizar que la sentencia no acceda + a datos que no tiene permitido ver ni ejecute sentencias maliciosas que dañen la base de datos. + + + El autorizador solo se utiliza durante la fase de preparación de la sentencia. + Puede ser llamado varias veces para una sola sentencia: una consulta + SELECT o UPDATE lo invoca por cada + columna que sería leída o actualizada. Se ejecuta de nuevo cada vez que SQLite + vuelve a preparar una sentencia, lo que puede ocurrir mientras la sentencia está siendo + ejecutada, por ejemplo, después de que el esquema haya cambiado. + + + El autorizador es llamado con hasta cinco argumentos. Los argumentos recibidos se + describen en SQLite3::setAuthorizer. + + + Solo puede haber un autorizador activo en una conexión de base de datos a la vez. + Cada llamada a este método reemplaza la anterior. El autorizador está deshabilitado + de forma predeterminada, y puede deshabilitarse de nuevo estableciendo una retrollamada &null;. + + + La retrollamada no debe modificar la conexión de base de datos que la invocó. + + + Más detalles pueden encontrarse en la + documentación de SQLite. + + + + Este método es el equivalente de SQLite3::setAuthorizer, + salvo que devuelve void en lugar de bool. + + + + + + &reftitle.parameters; + + + callback + + + El callable a invocar, o &null; para deshabilitar la + retrollamada de autorización actual. + + + Debe devolver uno de Pdo\Sqlite::OK, + Pdo\Sqlite::DENY o + Pdo\Sqlite::IGNORE. + Cuando se devuelve Pdo\Sqlite::DENY, la sentencia que + activó el autorizador falla con un error que indica que el acceso ha sido denegado. + Cuando se devuelve Pdo\Sqlite::IGNORE para una acción de lectura, + la sentencia se prepara de modo que se sustituye un valor &null; por la + columna que habría sido leída. + + + + + + + + &reftitle.returnvalues; + + &return.void; + + + + + &reftitle.errors; + + Este método en sí mismo no lanza excepciones, pero si la retrollamada del autorizador + no devuelve un valor de tipo int, o devuelve un int que no es uno de + Pdo\Sqlite::OK, Pdo\Sqlite::DENY o + Pdo\Sqlite::IGNORE, la preparación de la sentencia lanza un + TypeError o un ValueError + respectivamente. + + + + + &reftitle.examples; + + Ejemplo de <methodname>Pdo\Sqlite::setAuthorizer</methodname> + + Solo se permiten acciones de lectura en la conexión. Los códigos de acción están expuestos + como constantes de clase SQLite3, lo que requiere que la + extensión SQLite3 esté disponible; sus + valores enteros pueden usarse directamente en caso contrario. + + +exec('CREATE TABLE users (id, name)'); + +$db->setAuthorizer(function (int $action, ...$args) { + return match ($action) { + SQLite3::SELECT, SQLite3::READ => Pdo\Sqlite::OK, + default => Pdo\Sqlite::DENY, + }; +}); + +var_dump($db->query('SELECT name FROM users') instanceof PDOStatement); + +try { + $db->exec('DROP TABLE users'); +} catch (PDOException $e) { + echo $e->getMessage(), "\n"; +} +?> +]]> + + &example.outputs.similar; + + + + + + + + &reftitle.seealso; + + SQLite3::setAuthorizer + + + + +