Das einzige Mal, dass ich festgestellt habe, dass es wichtig ist, einen Integer-Parameter zu verwenden, ist in einem LIMIT
Klausel.
SELECT
...
LIMIT ?, ?
MySQL akzeptiert in diesem Kontext keine String-Literale in Anführungszeichen und akzeptiert keine Parameter vom Typ String. Sie müssen eine Ganzzahl verwenden.
Siehe parametrisierte PDO-Abfrage und `LIMIT`-Klausel - funktioniert nicht für meine Tests dazu. Das war eine Frage zu PDO, und ich habe mysqli nicht getestet, aber ich glaube, es ist eine serverseitige MySQL-Anforderung, in diesem Fall ganzzahlige Parameter zu verwenden. Es sollte also auch für mysqli gelten.
In allen anderen Fällen (AFAIK) ist MySQL in der Lage, Strings in Ganzzahlen umzuwandeln, indem es die führenden Ziffern im String liest und alle folgenden Zeichen ignoriert.
@Dharman verweist in einem Kommentar unten auf die MySQL-Unterstützung für Ganzzahlen in ORDER BY
:
SELECT
...
ORDER BY ?
Eine Ganzzahl in ORDER BY
bedeutet, nach der Spalte an dieser Position zu sortieren, nicht nach dem konstanten Wert der Zahl:
SELECT
...
ORDER BY 1 -- sorts by the 1st column
Ein äquivalenter Zeichenfolgenwert, der diese Zahl enthält, verhält sich jedoch nicht gleich. Es sortiert nach dem konstanten Wert der Zeichenfolge, was bedeutet, dass jede Zeile gebunden ist und die Sortierreihenfolge willkürlich ist.
SELECT
...
ORDER BY '1' -- sorts by a constant value, so all rows are tied
Daher ist dies ein weiterer Fall, in dem der Datentyp für einen Abfrageparameter wichtig ist.
Verwenden Sie andererseits Ordnungszahlen, um nach der Spalte an dieser Position in ORDER BY
zu sortieren oder GROUP BY
ist veraltet, und wir sollten uns nicht auf diese Verwendung von SQL verlassen.