Tengo que insertar una fila usando la biblioteca mejorada de mysql de php en una tabla en mysql que tiene su clave primaria de tipo VARBINARY. El contenido de este campo es un hash sha1 calculado.PHP- insertando datos binarios en mysql usando declaraciones preparadas
Si funciono con la pregunta de la manera antigua que funciona perfectamente:
$mysqli->$query("INSERT INTO table (id, field1) VALUES (0x" . $id . ",'" . $field1 . "')");
Pero cuando intento ejecutarlo como una declaración preparada, no puedo encontrar la manera de hacerlo. Si realizo la acción equivalente:
if($stmt = $mysqli->prepare("INSERT INTO table (id, field1) VALUES (?, ?)")) {
$stmt->bind_param('ss', "0x".$id, $field1);
//execute statement
}
Se produce una excepción diciendo que el contenido era demasiado grande para este campo. Y si intento insertarlo como un campo BLOB:
if($stmt = $mysqli->prepare("INSERT INTO table (id, field1) VALUES (?, ?)")) {
$stmt->bind_param('bs', $id, $field1);
//execute statement
}
Se da ningún error, se inserta la fila, pero el campo identificador ahora está vacía (no nulo, vacío).
Sé que puedo mezclar la consulta e ingresar el id concatenado en la cadena y los otros campos como parámetros de enlace de la declaración preparada, pero solo pregunto cuál es la forma correcta de insertar esto y tal vez ayudará a alguien en el futuro.
¿Qué valores tiene para ello y $ $ campo1 cuando se hace esto? ¿$ Id es un número entero? Si es así, ¿has intentado atarlo como tal? 'stmt-> bind_param ('es', $ id, $ campo1);' – nash
el valor de $ id es un hash sha1. No es un número entero. Los otros campos no están causando el problema, pero son principalmente cadenas. –
Más uno para tratar de conservar la seguridad de las declaraciones preparadas mientras se resuelve este problema. – HoldOffHunger