Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysqli_stmt::bind_param() - Geben Sie für jeden Parameter einen anderen Datentyp als s an

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.