diff --git a/reference/pdo/pdo/quote.xml b/reference/pdo/pdo/quote.xml index c2968a6c60..39af5ec89b 100755 --- a/reference/pdo/pdo/quote.xml +++ b/reference/pdo/pdo/quote.xml @@ -1,5 +1,5 @@ - + PDO::quote @@ -83,6 +83,31 @@ + + &reftitle.changelog; + + + + + &Version; + &Description; + + + + + 8.5.0 + + Lors de l'utilisation du pilote SQLite, une PDOException + est désormais lancée ou une alerte est émise, selon le mode d'erreur, si la + chaîne string contient un octet nul ; auparavant, la + chaîne était silencieusement tronquée au niveau de l'octet nul. + + + + + + + &reftitle.examples; diff --git a/reference/pdo_sqlite/configure.xml b/reference/pdo_sqlite/configure.xml index 85837102e8..ae532a6084 100644 --- a/reference/pdo_sqlite/configure.xml +++ b/reference/pdo_sqlite/configure.xml @@ -1,19 +1,18 @@ - - - +
&reftitle.install; - + Le driver PDO PDO_SQLITE est actif par défaut. Pour le désactiver, utiliser l'option de compilation , où [=DIR] (optionnel) représente le chemin vers le dossier d'installation de base de sqlite. - À partir de PHP 7.4.0 libsqlite ≥ 3.5.0 est requis. + À partir de PHP 7.4.0 libsqlite ≥ 3.5.0 est requis, + et à partir de PHP 8.5.0 libsqlite ≥ 3.7.17 est requis. Auparavant, la libsqlite intégrée pouvait être utilisée à la place, et était par défaut, si [=DIR] était omis. - + Installation supplémentaire sur Windows à partir de PHP 7.4.0 diff --git a/reference/pdo_sqlite/pdo-sqlite.xml b/reference/pdo_sqlite/pdo-sqlite.xml index ce85b7a7d9..f8d184937d 100644 --- a/reference/pdo_sqlite/pdo-sqlite.xml +++ b/reference/pdo_sqlite/pdo-sqlite.xml @@ -1,6 +1,5 @@ - - + La classe 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 + + + Un attribut de requête préparée en lecture seule, récupéré avec + PDOStatement::getAttribute, qui vaut &true; si + la requête préparée a été exécutée et possède encore une ligne en attente, + et &false; sinon. + Disponible à partir de PHP 8.5.0. + + + + + Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT + + + Un attribut de requête préparée contrôlant le mode d'explication, défini avec + PDOStatement::setAttribute. Les valeurs possibles sont + Pdo\Sqlite::EXPLAIN_MODE_PREPARED, + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN et + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN. + Une ValueError est lancée si PHP a été compilé + avec une libsqlite antérieure à 3.43.0. + Disponible à partir de PHP 8.5.0. + + + + + Pdo\Sqlite::EXPLAIN_MODE_PREPARED + + + Valeur pour Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT : + retourne la requête telle qu'elle a été préparée (aucune explication). + Disponible à partir de PHP 8.5.0, lorsque PHP est compilé avec une libsqlite >= 3.43.0. + + + + + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN + + + Valeur pour Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT : + retourne les opcodes de la machine virtuelle utilisée pour exécuter la requête + (équivalent à l'instruction EXPLAIN de SQLite). + Disponible à partir de PHP 8.5.0, lorsque PHP est compilé avec une libsqlite >= 3.43.0. + + + + + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN + + + Valeur pour Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT : + retourne le plan d'exécution de la requête (équivalent à l'instruction + EXPLAIN QUERY PLAN de SQLite). + Disponible à partir de PHP 8.5.0, lorsque PHP est compilé avec une libsqlite >= 3.43.0. + + + + + Pdo\Sqlite::ATTR_TRANSACTION_MODE + + + Un attribut de connexion configurant le mode de transaction utilisé par + PDO::beginTransaction. Les valeurs possibles sont + Pdo\Sqlite::TRANSACTION_MODE_DEFERRED, + Pdo\Sqlite::TRANSACTION_MODE_IMMEDIATE et + Pdo\Sqlite::TRANSACTION_MODE_EXCLUSIVE. + Disponible à partir de PHP 8.5.0. + + + + + Pdo\Sqlite::TRANSACTION_MODE_DEFERRED + + + Valeur pour Pdo\Sqlite::ATTR_TRANSACTION_MODE : + utilise le mode de transaction DEFERRED de SQLite (le mode par défaut). + Disponible à partir de PHP 8.5.0. + + + + + Pdo\Sqlite::TRANSACTION_MODE_IMMEDIATE + + + Valeur pour Pdo\Sqlite::ATTR_TRANSACTION_MODE : + utilise le mode de transaction IMMEDIATE de SQLite. + Disponible à partir de PHP 8.5.0. + + + + + Pdo\Sqlite::TRANSACTION_MODE_EXCLUSIVE + + + Valeur pour Pdo\Sqlite::ATTR_TRANSACTION_MODE : + utilise le mode de transaction EXCLUSIVE de SQLite. + Disponible à partir de PHP 8.5.0. + + + + + Pdo\Sqlite::OK + + + Valeur de retour d'une fonction de rappel d'autorisation définie avec + Pdo\Sqlite::setAuthorizer, autorisant l'action. + Disponible à partir de PHP 8.5.0. + + + + + Pdo\Sqlite::DENY + + + Valeur de retour d'une fonction de rappel d'autorisation définie avec + Pdo\Sqlite::setAuthorizer, refusant l'action. + Disponible à partir de PHP 8.5.0. + + + + + Pdo\Sqlite::IGNORE + + + Valeur de retour d'une fonction de rappel d'autorisation définie avec + Pdo\Sqlite::setAuthorizer, substituant une valeur + &null; à la colonne qui aurait été lue. + Disponible à partir de PHP 8.5.0. + + +
+ +
+ &reftitle.changelog; + + + + + &Version; + &Description; + + + + + 8.5.0 + + Ajout des 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 et + 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 7b7bfdcd2f..3767832076 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; + + Une TypeError est lancée si + callback ne retourne pas un int. + + + + + &reftitle.changelog; + + + + + &Version; + &Description; + + + + + 8.4.0 + + Une TypeError est désormais lancée si + callback ne retourne pas un int ; + auparavant, la valeur retournée était convertie en 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..b2b94a18d2 --- /dev/null +++ b/reference/pdo_sqlite/pdo/sqlite/setauthorizer.xml @@ -0,0 +1,172 @@ + + + + + Pdo\Sqlite::setAuthorizer + Configure une fonction de rappel à utiliser comme autorisateur pour limiter ce qu'une instruction peut faire + + + + &reftitle.description; + + public voidPdo\Sqlite::setAuthorizer + callablenullcallback + + + Définit une fonction de rappel qui sera appelée par SQLite chaque fois qu'une action + est effectuée (lecture, suppression, mise à jour, etc.). Cela est utilisé lors de la + préparation d'une instruction SQL provenant d'une source non fiable, afin de s'assurer + que l'instruction n'accède pas à des données qu'elle n'est pas autorisée à voir et + n'exécute pas d'instructions malveillantes qui endommageraient la base de données. + + + L'autorisateur n'est utilisé que pendant la phase de préparation de l'instruction. + Il peut être appelé plusieurs fois pour une seule instruction : une requête + SELECT ou UPDATE l'appelle pour chaque colonne + qui serait lue ou mise à jour. Il est appelé de nouveau chaque fois que SQLite + prépare à nouveau une instruction, ce qui peut se produire pendant que l'instruction + est en cours d'exécution, par exemple après une modification du schéma. + + + L'autorisateur est appelé avec jusqu'à cinq arguments. Les arguments reçus sont + décrits sur la page SQLite3::setAuthorizer. + + + Un seul autorisateur peut être en place à la fois sur une connexion à une base de + données. Chaque appel à cette méthode remplace le précédent. L'autorisateur est + désactivé par défaut, et peut être désactivé de nouveau en définissant une fonction + de rappel &null;. + + + La fonction de rappel ne doit pas modifier la connexion à la base de données qui + l'a invoquée. + + + Plus de détails sont disponibles dans la + documentation de SQLite. + + + + Cette méthode est l'équivalent de SQLite3::setAuthorizer, + à ceci près qu'elle retourne void au lieu de bool. + + + + + + &reftitle.parameters; + + + callback + + + Le callable à invoquer, ou &null; pour désactiver la fonction de + rappel d'autorisation courante. + + + Il doit retourner l'une des valeurs Pdo\Sqlite::OK, + Pdo\Sqlite::DENY ou + Pdo\Sqlite::IGNORE. + Lorsque Pdo\Sqlite::DENY est retourné, l'instruction qui a + déclenché l'autorisateur échoue avec une erreur indiquant que l'accès est refusé. + Lorsque Pdo\Sqlite::IGNORE est retourné pour une action de + lecture, l'instruction est préparée de sorte qu'une valeur &null; soit substituée + à la colonne qui aurait été lue. + + + + + + + + &reftitle.returnvalues; + + &return.void; + + + + + &reftitle.errors; + + Cette méthode elle-même ne lance pas d'exception, mais si la fonction de rappel + d'autorisation ne retourne pas un int, ou retourne un int + qui n'est pas l'une des valeurs Pdo\Sqlite::OK, + Pdo\Sqlite::DENY ou Pdo\Sqlite::IGNORE, + la préparation de l'instruction lance respectivement une + TypeError ou une + ValueError. + + + + + &reftitle.examples; + + Exemple avec <methodname>Pdo\Sqlite::setAuthorizer</methodname> + + Seules les actions de lecture sont autorisées sur la connexion. Les codes d'action + sont exposés en tant que constantes de la classe SQLite3, ce + qui nécessite que l'extension SQLite3 soit + disponible ; leurs valeurs entières peuvent être utilisées directement dans le cas + contraire. + + +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 + + + + +