Lors du développement d'un widget, j'ai une requete sql qui doit être suivi par un OR.
J'ai remarqué que pour avoir un OR après cette requete il fallait faire une requete comme ceci :
$this->db->where('ma colonne', 'ma valeur', 'OR')
Mais un bug survient si la requete entière est dans la première colonne :
Requete en sortie pour type where('Ma requete = machin cachin', '', 'OR') : ma reqete = machin machin = ? OR suite de la requete
Requete si je met bien where('mon premier', 'mon dexième', 'OR') : mon premier = ? OR suite de la requete
Voici ma requete originale (2 version du bug)
$this->db->where('DATE_FORMAT(date, "%Y-%m-%d")', 'DATE_FORMAT((CURDATE() + INTERVAL 1 DAY), "%Y-%m-%d")', 'OR'); Sortie : WHERE DATE_FORMAT(DATE, "%Y-%m-%d") = ? OR
Mais mon problème est que cette requette est utilisée seulement si un condition est vérifiée. Elle est donc "autonome". Elle rajoute juste une condition au début de ma requete. Du coup je veux juste comparer une valeur mais avec un OR pour la comparaison suivante.
Pour le coup, ta solution va quand même me mettre un AND après si je ne m'abuse.
J'ai remarqué en suivant la logique du fichier root/neofrag/core/db.php la chose suivante :
public function where($name, $value = NULL, $operator = 'AND')
{
if (func_num_args() > 3 && in_array(func_num_args() % 3, [0, 2]))
{
$args = [];
Du coup l'opérateur par défaut est AND. Si je ne met ma requete de comparaison dans $name, que je laisse vide $value ('') et que $operator je met OR, il m'affiche la première de mes erreurs.
Si je met bien mon premier élément de comparé dans $name et mon comparant dans $value puis le OR dans $operator, il me met la 2eme option.
Je ne sais pas si en entrant dans la fonction $value = '' il le met en null ou bien comme champs vide mais le considère comme présent et non NULL.
Dans tout mes cas $value donne un ? dans ma requête. Si je le met en NULL, il me rajoute IS NULL dans ma requete.