Child pages
  • Les bonnes pratiques de la classe Db sur Prestashop 1.4

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Cette méthode permet de générer automatiquement l'insertion ou la mise à jour de la base à partir d'un tableau de données. Il faut utiliser cette méthode à la place de faire des requêtes INSERT ou UPDATE, sauf si ces requêtes sont un peu complexes (utilisation de fonctions SQL, requêtes imbriquées, etc.). L'avantage de tout faire via une seule méthode est de centraliser les appels. Le jour où il y a un traitement en particulier à faire sur certaines tables lors de l'insertion il est ainsi possible de le faire en surchargeant cette méthode via le système d'override de la 1.4 de PrestaShop.

Exemple fictif :

Code Block
$target = Tools::getValue('id');
$name = Tools::getValue('name');
Db::getInstance()->autoExecute('target_table', array(
	'id_target' =>    (int)$target,
	'name' =>    pSQL($name),
), 'INSERT');

...

Code Block
INSERT INTO `target_table` (`id_target`, `name`) VALUES (10, 'myName')

Important :

  • Veillez à toujours protéger vos données avant de les passer à autoExecute()
  • Dans l'exemple, on s'assure que id_target soit un entier et que name soit protégé contre les injections SQL avec pSQL()
  • Dans le cadre de PrestaShop, le nom des tables doit toujours être précédé du préfixe utilisé, contenu dans la constante DB_PREFIX
  • En remplaçant le troisième argument par UPDATE il est possible de générer à la place une requête UPDATE. Dans ce cas-là, il est possible de passer des restrictions SQL (par exemple : …->autoExecute('table', $data, 'UPDATE', 'myField = 13 AND id < 8');

...

Cette méthode exécute la requête SQL donnée et charge l’ensemble des résultats qu’elle retourne dans un tableau multidimensionnel. Elle n’est à utiliser que pour les requêtes en lecture (SELECT, SHOW, etc.). Les résultats de cette requête seront mis en cache, sauf si l’argument $use_cache vaut false. Le second argument $array est déprécié et ne doit plus être utilisé, laissez-le à true.

...

Cette méthode exécute la requête SQL donnée et récupère la première ligne de résultats. Elle n’est à utiliser que pour les requêtes en lecture (SELECT, SHOW, etc.). Les résultats de cette requête seront mis en cache, sauf si l’argument $use_cache vaut false.

...

Cette méthode exécute la requête SQL donnée et récupère uniquement le premier résultat de la première ligne. Elle n’est à utiliser que pour les requêtes en lecture (SELECT, SHOW, etc.). Les résultats de cette requête seront mis en cache, sauf si l’argument $use_cache vaut false.

...

Cette méthode met en cache et retourne le nombre de résultats de la dernière requête SQL.

Attention : cette méthode n’est pas dépréciée mais il est fortement déconseillé de l’utiliser pour des raisons de bonnes pratiques. En effet, il vaut mieux récupérer le nombre de résultats via une requête de type SELECT COUNT(star) ( * ) au préalable.

Quelques méthodes annexes

...