Tester l'existence d'un champs dans une table

swedge
Invité n'ayant pas de compte PHPfrance

06 juil. 2018, 15:05

Bonjour à tous,

J'ai une requête SQL standard que j'utilise dans une boucle pour agréger les résultats de plusieurs BDD.
Les BDD concernées ont une structure à 99% similaire.

Voici la requête :

SELECT o.*, op.products_name
FROM orders o
LEFT JOIN products_description pd ON op.products_id = pd.products_id
WHERE o.sort_order = '5' AND (o.orders_id ='".$_POST['search']."' OR o.order_id_bis ='".$_POST['search']."' OR o.customers_email_address LIKE '%".$_POST['search']."%')

Le soucis provient du champs order_id_bis (en gras) qui est présent que dans certaines des BDD de ma boucle.
Du coup quand je lance cette requête j'ai une Fatal error dès que la boucle arrive sur une BDD n'ayant pas le champs.

J'aurais voulu savoir s'il était possible d'indiquer en Sql de faire le Where que si le champs existe dans la BDD.

En gros si la BDD ne contient pas ce champs, le Where sur ce champs ne se fait pas et il n'y a pas d'erreur retournée. Par contre si le champs existe dans la BDD on fait le Where.

J'espère avoir été le plus clair possible :D

Par avance merci pour votre aide.

Stephen

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 7588 Messages

06 juil. 2018, 15:19

Bonjour,

Au sein de la requête même, je ne pense pas que ce soit possible.
En revanche, tu peux faire une requête juste avant pour vérifier l'existence de la colonne et donc construire ta requête différemment ensuite en fonction du résultat de ta vérification.

Pour la vérification, voici le format de la requête :
SHOW COLUMNS FROM table LIKE 'nom_colonne'
Si ça ne renvoie rien, c'est que la colonne n'existe pas, si ça renvoie une ligne, c'est que la colonne existe
Quand tout le reste a échoué, lisez le mode d'emploi...