Programmer avec SPIP 3.0
Documentation technique sur SPIP 3.0

> > > > sql_fetch

sql_fetch

La fonction sql_fetch() retourne une ligne, sous forme d’un tableau associatif, d’un résultat d’une sélection. Elle retourne false s’il n’y a plus de ligne à afficher.

Elle admet 3 paramètres, seul le premier est indispensable :

  1. $res est la ressource obtenue avec sql_select(),
  2. $serveur,
  3. $option.

Elle s’utilise en partenariat étroit avec sql_select(), souvent employé dans cette association :

  1. if ($res = sql_select('colonne', 'table')) {
  2. while ($r = sql_fetch($res)) {
  3. // utilisation des resultats avec $r['colonne']
  4. }
  5. }

Télécharger

Exemple

Lister les articles proposés à publication :

  1. $result = sql_select("id_article, id_rubrique, titre, statut", "spip_articles", "statut = 'prop'", "", "date DESC");
  2. while ($row = sql_fetch($result)) {
  3. $id_article=$row['id_article'];
  4. if (autoriser('voir', 'article', $id_article)) {
  5. // actions
  6. }
  7. }

Télécharger

Le plugin « Contact avancé » peut enregistrer des messages dans la table spip_messages. Au moment de la suppression d’un de ces messages, il supprime les éventuels documents qui lui sont liés comme ceci :

  1. function action_supprimer_message() {
  2. $securiser_action = charger_fonction('securiser_action', 'inc');
  3. $id_message = $securiser_action();
  4. // Verifions si nous avons un document
  5. if ($docs = sql_select('id_document', 'spip_documents_liens', 'id_objet=' . intval($id_message) . ' AND objet="message"')) {
  6. include_spip('action/documenter');
  7. while ($id_doc = sql_fetch($docs)) {
  8. supprimer_lien_document($id_doc['id_document'], "message", $id_message);
  9. }
  10. }
  11. sql_delete("spip_messages", "id_message=" . sql_quote($id_message));
  12. sql_delete("spip_auteurs_messages", "id_message=" . sql_quote($id_message));
  13. }

Télécharger

La fonction calculer_rubriques_publiees() dans ecrire/inc/rubriques.php permet de recalculer les statuts et dates de rubriques pour savoir lesquelles ont le statut « publié ». Dedans, une partie sélectionne les rubriques qui ont des documents publiés (la rubrique l’est alors aussi) et attribue à une colonne temporaire le nouveau statut et la nouvelle date. Une fois toutes les mises à jour faites, la colonne temporaire est enregistrée dans la véritable colonne :

  1. // Mettre les compteurs a zero
  2. sql_updateq('spip_rubriques', array(
  3. 'date_tmp' => '0000-00-00 00:00:00',
  4. 'statut_tmp' => 'prive'));
  5. // [...]
  6. // Publier et dater les rubriques qui ont un *document* publie
  7. $r = sql_select(
  8. "rub.id_rubrique AS id",
  9. "max(fille.date) AS date_h"),
  10. "spip_rubriques AS rub",
  11. "spip_documents AS fille",
  12. "spip_documents_liens AS lien"),
  13. "rub.id_rubrique = lien.id_objet",
  14. "lien.objet='rubrique'",
  15. "lien.id_document=fille.id_document",
  16. "rub.date_tmp <= fille.date",
  17. "fille.mode='document'", "rub.id_rubrique"));
  18. while ($row = sql_fetch($r)) {
  19. sql_updateq('spip_rubriques',
  20. 'statut_tmp'=>'publie',
  21. 'date_tmp'=>$row['date_h']),
  22. "id_rubrique=" . $row['id']);
  23. }
  24. // [...]
  25. // Enregistrement des modifs
  26. sql_update('spip_rubriques', array(
  27. 'date'=>'date_tmp',
  28. 'statut'=>'statut_tmp'));

Télécharger