sql >> Databáze >  >> RDS >> Mysql

mysqli_stmt::bind_param() - zadejte jiný datový typ než s pro každý parametr

Jediný případ, kdy jsem zjistil, že je důležité použít celočíselný parametr, je v LIMIT doložka.

SELECT
...
LIMIT ?, ?

MySQL v tomto kontextu nepřijímá citované řetězcové literály a nepřijímá parametry s typem řetězce. Musíte použít celé číslo.

Viz Parametrizovaný dotaz na PDO a Klauzule `LIMIT` – nefunguje pro mé testy na toto. To byla otázka týkající se PDO a mysqli jsem netestoval, ale domnívám se, že v tomto případě je použití celočíselných parametrů na straně serveru požadavek MySQL. Takže by to mělo platit i pro mysqli.

Ve všech ostatních případech (AFAIK) je MySQL schopno převádět řetězce na celá čísla čtením úvodních číslic v řetězci a ignorováním všech následujících znaků.

@Dharman v komentáři níže odkazuje na podporu MySQL pro celá čísla v ORDER BY :

SELECT
...
ORDER BY ?

Celé číslo v ORDER BY znamená řadit podle sloupce na této pozici, nikoli podle konstantní hodnoty čísla:

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

Ale ekvivalentní řetězcová hodnota obsahující toto číslo nepůsobí stejně. Třídí podle konstantní hodnoty řetězce, což znamená, že každý řádek je svázaný a pořadí řazení bude libovolné.

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

Toto je tedy další případ, kdy je důležitý datový typ pro parametr dotazu.

Na druhou stranu použití pořadových čísel k řazení podle sloupce na této pozici v ORDER BY nebo GROUP BY je zastaralý a neměli bychom se na toto použití SQL spoléhat.



  1. Vytváření dynamických SQL dotazů do databáze MySQL

  2. Oracle vybere nejnovější záznam data

  3. Vícenásobné výběrové příkazy v jediném dotazu

  4. Jak nastavit výchozí uživatelské heslo v PostgreSQL