Drupal 7 : l'API de la base de données

Il est à noter que je n'ai pu installer Drupal 7 pour monter ce blog car impossible avec OVH.
Cependant en cherchant d'où venait l'erreur (on obtient un méchant SQLSTATE[70100]: <>: 1317 Query execution was interrupted) j'ai pu fouiller pour la première fois dans le code de la nouvelle release. Et là Oooooooh surprise de la POO !

En effet j'ai pu découvrir (avec grand bonheur, soit dit en passant) que la couche entière 'Base de données' de Drupal a été remaniée pour être programmée en POO.

Du coup ni une ni deux j'ai tripatouillé le code pour m'afficher toutes les propriétés de l'exception lancée et trouver la requête qui mettait le souk : SELECT 1 FROM information_schema.tables WHERE (table_schema = :db_condition_placeholder_4) AND (table_name = :db_condition_placeholder_5) 
Là il suffit d'un peu de jugeote : je suis sur OVH mutualisé, je n'ai donc pas accès à information_shema, le bug est posté y'a plus qu'à attendre voir si la communauté est prête à prendre en compte ce comportement.

Voici quelques exemples, récupérer la valeur d'un champ :

1
2
3
4
5
//Drupal 6 
$value = db_result(db_query('SELECT champ FROM {table}')); 
 
//Drupal 7 
$value = db_query('SELECT champ FROM {table}')->fetchField();

Récupérer un objet :

1
2
3
4
5
6
7
8
9
10
11
//Drupal 6: 
$result = db_query('SELECT champ FROM {table} WHERE condition = %d', $variable); 
while ($row = db_fetch_object($result)) { 
    // Boucler sur les résultats pour les traiter 
} 
 
//Sous Drupal 7 il n'y a pas de db_fetch_object() ou de db_fetch_array(): 
$result = db_query('SELECT champ FROM {table} WHERE condition = :substituant', array(':substituant' => $variable)); 
foreach ($result as $row) {
    // Boucler sur les résultats pour les traiter 
}

Autres requêtes:

1
2
3
4
5
6
7
8
9
10
//Une requête de suppression dans Drupal 7: 
db_delete('table') ->condition('champ_condition', $variable) ->execute(); 
 
//Une requête de mise à jour dans Drupal 7: 
db_update('table') ->fields( 
  array( 
    'champ_1' => $variable_1, 
    'champ_2' => $variable_2, 
  ) 
) ->condition('champ_condition', $variable_condition) ->execute();

Pour plus d'infos, je vous invite à jeter un coup d'oeil à l'API de drupal 7.

Via source.

Tags: