> For the complete documentation index, see [llms.txt](https://akyos.gitbook.io/book/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://akyos.gitbook.io/book/prestashop/modules/faire-une-requete-en-base-donnees.md).

# Faire une requête en base données

Il y plusieurs manières de faire une requête en base de données. Soit la façon "Legacy" avec les classes Db et Dequery, soit en version "modern" avec doctrine.&#x20;

{% hint style="warning" %}
**Avertissement de sécurité :**

Pour éviter les injections SQL, assurez-vous que les variables utilisées dans les requêtes sont correctement échappées :

* Utilisez `(int)` pour les entiers ;
* Utilisez `pSQL()` pour les chaînes de caractères.
  {% endhint %}

#### Db Class

:pushpin: <https://devdocs.prestashop-project.org/9/development/components/database/db/>

Pour résumer :&#x20;

```php
$db = \Db::getInstance();
$request = 'SELECT `id_table` FROM `' . _DB_PREFIX_ . 'some_table` ...';

$result = $db->execute($request); // Execute une requête brut
$resultSelect = $db->executeS($request); // Execute une requête SELECT brute
$resultRow = $db->getRow($request); // Récupère la première ligne uniquement
$resultCount = $db->getValue($request); // Récupère une seule valeur
```

Pour faire des **update / insert / delete**, il est possible de faire :&#x20;

```php
$db = \Db::getInstance();

$db->insert('db_table', [
    'id_lang' => (int) $lang,
    'value' => pSQL($value),
    'date_upd' => date('Y-m-d H:i:s'),
]);

$db->update('db_table', array(
    'value' => pSQL($value),
    'date_upd' => date('Y-m-d H:i:s'),
), 'id_table = 10', 1, true);

$db->delete('db_table', 'id_table = 10');
```

#### DBQuery Class

:pushpin:  <https://devdocs.prestashop-project.org/9/development/components/database/dbquery/>

Cette classe ne sert à faire que des requêtes SELECT

```php
$sql = new DbQuery();
$sql->select('*');
$sql->from('cms', 'c');
$sql->innerJoin('cms_lang', 'l', 'c.id_cms = l.id_cms AND l.id_lang = '.(int)$id_lang);
$sql->where('c.active = 1');
$sql->orderBy('position');
return Db::getInstance()->executeS($sql);
```

#### Doctrine&#x20;

:pushpin: <https://devdocs.prestashop-project.org/9/modules/concepts/doctrine/>
