sql >> Database teknologi >  >> RDS >> Mysql

MySQL WHERE LIKE arbejder ikke med flere felter ved hjælp af php og pdo bind

Problemet er sandsynligvis den $this->phone er tom, når du kører forespørgslen.

I så fald vil forespørgslen være SELECT * FROM [...] OR WHERE phone LIKE '%%' som altid vil returnere alt.

Løsning:Udelad telefonkriterierne, hvis de ikke er angivet, eller (hack alert! ) brug en værdi, der aldrig vil forekomme i den kolonne.

En anden måde at gøre dette på er at ændre forespørgslen til noget lignende

SELECT *
  FROM directory
 WHERE name LIKE :name 
   AND :name_provided = 1
    OR phone LIKE :phone
   AND :phone_provided = 1

Og bind derefter :phone_provided til 1 hvis $this->phone er defineret, ellers 0. Ligeledes med :name_provided .




  1. Sådan migrerer du databaser til din forhandlerserver

  2. Hvordan deaktiverer man MySQL root logins, når der ikke er angivet en adgangskode?

  3. Brug af WHERE-sætning til at finde POI inden for en afstand fra længde- og breddegrad

  4. Hvordan $_POST en dynamisk tildelt værdi i PHP?