sql >> Databasteknik >  >> RDS >> Mysql

PDO skickar rå fråga till MySQL medan Mysqli skickar förberedd fråga, båda ger samma resultat

Din PDO är konfigurerad för att emulera förberedda frågor, medan mysqli använder riktiga förberedda frågor.

Den förberedda frågan binder strängen ''1'' som ett heltalsparametervärde. PHP tvingar det till ett heltal med något som intval() . Alla strängar med icke-numeriska inledande tecken tolkas som 0 av PHP, så parametervärdet skickas efter prepare är värdet 0.

Den falska förberedda frågan använder stränginterpolation (istället för att binda) för att lägga till strängen ''1'' i SQL-frågan före MySQL analyserar det. Men resultatet är liknande, eftersom SQL också behandlar en sträng med icke-numeriska inledande tecken i ett heltalssammanhang som värdet 0.

Den enda skillnaden är vad som hamnar i den allmänna frågeloggen när parametern är bunden före preparering kontra efter preparering.

Du kan också få PDO att använda riktiga förberedda frågor, så det bör fungera precis som mysqli i det här fallet:

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

PS:Detta kan visa på en bra anledning till varför det är vanligt att börja id-värden på 1 istället för 0.




  1. Förstå och läsa PostgreSQL-systemkatalogen

  2. infoga och uppdatera med lagrad procedur

  3. Hur infogar man en bild i rummets beständighetsbibliotek?

  4. Hur man kopierar SQLite-databas från Android till en MySQL-databas (replikera/synkronisera)