From 4bf3c354d2518aaee7a4b3b0ea7c2cca91abda5f Mon Sep 17 00:00:00 2001 From: lacatoire Date: Wed, 2 Sep 2026 09:54:36 +0200 Subject: [PATCH 1/3] sync: document PHP 8.5 additions and behaviour changes in pdo_sqlite - Add changelog (8.5.0) to PDO::quote() for SQLite null byte behaviour - Update configure.xml: para->simpara, add libsqlite >= 3.7.17 for PHP 8.5.0 - Add 12 new constants (ATTR_BUSY_STATEMENT, ATTR_EXPLAIN_STATEMENT, etc.) and changelog section to Pdo\Sqlite class - Add errors and changelog (8.4.0) sections to Pdo\Sqlite::createCollation() - Translate new Pdo\Sqlite::setAuthorizer() method page - Update EN-Revision to eff8e0d4dd463ae6bd387f304effeaf3d5ce44d5 --- reference/pdo/pdo/quote.xml | 28 +- reference/pdo_sqlite/configure.xml | 10 +- reference/pdo_sqlite/pdo-sqlite.xml | 242 +++++++++++++++++- .../pdo_sqlite/pdo/sqlite/createcollation.xml | 35 ++- .../pdo_sqlite/pdo/sqlite/setauthorizer.xml | 167 ++++++++++++ 5 files changed, 471 insertions(+), 11 deletions(-) create mode 100644 reference/pdo_sqlite/pdo/sqlite/setauthorizer.xml 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..c1d51f52ff 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, 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. + 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, si libsqlite incluido podría haberse usado en su lugar, por omisión, si [=DIR] era omitido. - + 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..9a17a8b61b 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 @@ -100,6 +99,78 @@ 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; @@ -170,8 +241,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, compilado 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, compilado 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, compilado 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 + + + + + From c895dc1378470981c1ca0893738ede68b0e7ebb3 Mon Sep 17 00:00:00 2001 From: Louis-Arnaud Date: Thu, 3 Sep 2026 13:44:55 +0200 Subject: [PATCH 2/3] pdo_sqlite: match the doc-en xi:include form in the class synopsis --- reference/pdo_sqlite/pdo-sqlite.xml | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/reference/pdo_sqlite/pdo-sqlite.xml b/reference/pdo_sqlite/pdo-sqlite.xml index 9a17a8b61b..4fa739e6a8 100644 --- a/reference/pdo_sqlite/pdo-sqlite.xml +++ b/reference/pdo_sqlite/pdo-sqlite.xml @@ -52,9 +52,7 @@ &InheritedConstants; - - - + &Constants; @@ -173,17 +171,11 @@ &Methods; - - - + &InheritedMethods; - - - - - - + + From c334a23d5e940adee0f1cd741f0d2e89f20ccf2a Mon Sep 17 00:00:00 2001 From: Louis-Arnaud Date: Thu, 3 Sep 2026 14:23:23 +0200 Subject: [PATCH 3/3] pdo_sqlite: apply the doc-es glossary and fix the bundled libsqlite sentence --- reference/pdo_sqlite/configure.xml | 6 +++--- reference/pdo_sqlite/pdo-sqlite.xml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/reference/pdo_sqlite/configure.xml b/reference/pdo_sqlite/configure.xml index c1d51f52ff..21c28cc765 100644 --- a/reference/pdo_sqlite/configure.xml +++ b/reference/pdo_sqlite/configure.xml @@ -5,13 +5,13 @@
&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, y a partir de PHP 8.5.0 se requiere libsqlite ≥ 3.7.17. - Anteriormente, si libsqlite incluido podría haberse usado en su lugar, por omisión, - si [=DIR] era omitido. + 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 4fa739e6a8..d29ef91894 100644 --- a/reference/pdo_sqlite/pdo-sqlite.xml +++ b/reference/pdo_sqlite/pdo-sqlite.xml @@ -266,7 +266,7 @@ 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, compilado con libsqlite >= 3.43.0. + Disponible a partir de PHP 8.5.0, cuando se compila con libsqlite >= 3.43.0. @@ -277,7 +277,7 @@ 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, compilado con libsqlite >= 3.43.0. + Disponible a partir de PHP 8.5.0, cuando se compila con libsqlite >= 3.43.0. @@ -288,7 +288,7 @@ 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, compilado con libsqlite >= 3.43.0. + Disponible a partir de PHP 8.5.0, cuando se compila con libsqlite >= 3.43.0.