Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysqli_stmt::bind_param() - especifica outro tipo de dados diferente de s para cada parâmetro


A única vez que descobri que é importante usar um parâmetro inteiro é em um LIMIT cláusula.
SELECT
...
LIMIT ?, ?

O MySQL não aceita literais de string entre aspas neste contexto e não aceita parâmetros com tipo de string. Você tem que usar um número inteiro.

Consulte consulta PDO parametrizada e Cláusula `LIMIT` - não está funcionando para meus testes sobre isso. Essa foi uma pergunta sobre o PDO, e eu não testei o mysqli, mas acredito que seja um requisito do MySQL do lado do servidor usar parâmetros inteiros neste caso. Portanto, deve se aplicar ao mysqli também.

Em todos os outros casos (AFAIK), o MySQL é capaz de converter strings em inteiros lendo os primeiros dígitos da string e ignorando quaisquer caracteres seguintes.

@Dharman em um comentário abaixo faz referência ao suporte do MySQL para inteiros em ORDER BY :
SELECT
...
ORDER BY ?

Um inteiro em ORDER BY significa classificar pela coluna nessa posição, não pelo valor constante do número:
SELECT
...
ORDER BY 1 -- sorts by the 1st column

Mas um valor de string equivalente contendo esse número não age da mesma forma. Ele classifica pelo valor constante da string, o que significa que cada linha está vinculada e a ordem de classificação será arbitrária.
SELECT
...
ORDER BY '1' -- sorts by a constant value, so all rows are tied

Portanto, este é outro caso em que o tipo de dados para um parâmetro de consulta é importante.

Por outro lado, usando números ordinais para classificar pela coluna nessa posição em ORDER BY ou GROUP BY está obsoleto e não devemos confiar nesse uso de SQL.