sql >> Databasteknik >  >> RDS >> Mysql

mysqli_stmt::bind_param() - ange en annan datatyp än s för varje parameter

Den enda gången jag har funnit att det är viktigt att använda en heltalsparameter är i en LIMIT klausul.

SELECT
...
LIMIT ?, ?

MySQL accepterar inte citerade strängliteraler i detta sammanhang och accepterar inte parametrar med strängtyp. Du måste använda ett heltal.

Se Parametriserad PDO-fråga och `LIMIT`-sats – fungerar inte för mina tester på detta. Det var en fråga om PDO, och jag testade inte mysqli, men jag tror att det är ett MySQL-krav på serversidan att använda heltalsparametrar i det här fallet. Så det borde gälla mysqli också.

I alla andra fall (AFAIK) kan MySQL konvertera strängar till heltal genom att läsa de inledande siffrorna i strängen och ignorera alla följande tecken.

@Dharman i en kommentar nedan hänvisar till MySQL:s stöd för heltal i ORDER BY :

SELECT
...
ORDER BY ?

Ett heltal i ORDER BY betyder att sortera efter kolumnen i den positionen, inte efter talets konstanta värde:

SELECT
...
ORDER BY 1 -- sorts by the 1st column

Men ett ekvivalent strängvärde som innehåller det numret fungerar inte på samma sätt. Den sorteras efter det konstanta värdet på strängen, vilket betyder att varje rad är bunden, och sorteringsordningen kommer att vara godtycklig.

SELECT
...
ORDER BY '1' -- sorts by a constant value, so all rows are tied

Därför är detta ytterligare ett fall där datatypen för en frågeparameter är viktig.

Å andra sidan, använd ordningsnummer för att sortera efter kolumnen i den positionen i ORDER BY eller GROUP BY är utfasad, och vi bör inte lita på den användningen av SQL.



  1. Hur använder man MySQLdb med Python och Django i OSX 10.6?

  2. Hur ger man Trigger-genererat värde till Hibernate ValueObject?

  3. SQL Server JDBC-fel på Java 8:Drivrutinen kunde inte upprätta en säker anslutning till SQL Server genom att använda Secure Sockets Layer (SSL) kryptering

  4. Installera Percona/MySQL obevakad på Ubuntu