tipo de variable mysqli_stmt_bind_param

Estoy convirtiendo de mysql_ a mysqli_ y aún nuevo en mysqli_ . Aquí está mi código:

 $stmt = mysqli_prepare($con, "INSERT INTO test VALUES (?, ?)"); mysqli_stmt_bind_param($stmt, 'ss', $a, $b); $a=1; $b=1.5; mysqli_stmt_execute($stmt); 

Mi pregunta es:

 $a has Integer value $b float 

pero el tipo de variable correspondiente en mysqli_stmt_bind_param ss (string,string) .

el resultado es que los datos se insertaron correctamente en la mesa, ¿funciona como se esperaba o estoy haciendo algo mal?

En realidad, las funciones de enlace ( mysqli_stmt_bind_param o PDOStatement::bindParam ) no son funciones de validación. Usted muestra cómo interpretar su valor únicamente y qué tipo de valor desea obtener del resultado.

La respuesta es: es el trabajo según lo previsto.

¿Están los campos en la tabla a los que apunta esta statement configurados como enteros / flotantes? ¿O están configurados como cadenas en la base de datos (algunas personas hacen esto, por el motivo que sea)? Además, en cuanto a que las declaraciones preparadas son más lentas, creo que solo es el caso cuando se ejecuta una única consulta de ejecución. Si está haciendo varias consultas en un bucle, las declaraciones preparadas son, creo, significativamente más rápidas (siempre que la statement se haya construido fuera del bucle).

La variable de origen puede ser de cualquier tipo en realidad, pero intentará convertirla en cadena al preparar la consulta, ya que ese es el tipo que dijo que toma la consulta.

Lo que realmente importa son los tipos de campos en la tabla. No estoy seguro de cómo maneja PHP esto, pero si la consulta toma un número entero ( i ) e intenta prepararlo como una cadena ( s ), puede causar un error. En cualquier caso, debe especificar el tipo correcto para evitar problemas.