Je viens de remarquer que @Berdir était si agréable à supprimer db_affected_rows
de Drupal 7 . Je me demande maintenant quelle est la meilleure pratique pour détecter si la requête que vous avez exécutée a changé quelque chose dans la base de données.
Un cas d'utilisation typique serait de.
db_query(...);
if (!db_affected_rows()) {
db_query(...);
}
J'ai jeté un œil à l'objet de requête renvoyé par db_query, mais cela ne semblait pas être d'une grande aide.
Mise à jour:
je vois que je ne savais pas trop dans quelles circonstances j'avais besoin des informations.
Mon cas d'utilisation actuel est assez simple. J'ai une table pour un type de nœud avec une colonne nid et quelques colonnes de données. J'ai un formulaire et en soumettant le formulaire, je veux insérer ou mettre à jour la ligne dans la base de données.
Le problème avec db_update
/ db_insert
est que, si j'utilise d'abord la mise à jour et que j'insère si la mise à jour renvoie 0, je n'attraperai pas la condition, où le formulaire a été soumis avec la valeur dans la base de données. Si j'utilise d'abord db_insert, cela soulèvera une erreur s'il y a déjà une ligne dans la base de données.
Je suppose que dans cette condition spécifique, je pourrais insérer une valeur vide lorsque le nœud est créé et utiliser uniquement la mise à jour, mais dans certains cas, cela pourrait ne pas être possible, si j'avais besoin de stocker des informations qui étaient saisies dans une base de données externe. Je voudrais également éviter d'avoir à dépendre des valeurs de la base de données pour que mon code fonctionne.
Ma stratégie habituelle pour de tels cas a été de faire un
db_query("INSERT IGNORE INTO ...")
if (!db_affected_rows()) {
db_query("UPDATE ...");
}
Faire cela est à la fois simple et sans erreur quelle que soit la condition dans laquelle se trouve la base de données. La meilleure option que je peux voir en ce moment, serait de la gérer avec SQL et de faire ceci:
db_query("INSERT ... ON DUPLICATE KEY UPDATE");
Mais j'espérais que l'API db serait capable de gérer cela.