prepared - sentencias preparadas php mysqli
Problema con la declaraciĆ³n preparada de Mysqli cuando se usa AES_ENCRYPT (1)
He buscado mucho antes de publicar. :)
Estoy tratando de hacer una inserción simple en mySQL. Estoy usando mysqli usando declaraciones preparadas. A continuación está el código:
$sql_query = "UPDATE $table SET $name = AES_ENCRYPT(?,''$key'') WHERE $id_name = ''$_SESSION[$id_name]''";
$stmt = $mysqli->prepare($sql_query);
$stmt->bind_param(''b'', $value);
$stmt->execute();
Sí, estoy declarando $ mysqli con una conexión al servidor de base de datos mySQL anteriormente en el código. $ key también se declara antes en el script. A continuación se muestra el resultado en el archivo de registro general mySQL cuando se invoca este código:
120104 10:46:18 359 Connect root@localhost on payday-loan-leads
359 Query SELECT table_location, id_name, encrypt FROM insert_information WHERE required_field_name = ''first_name''
359 Prepare UPDATE personal_info SET first_name = AES_ENCRYPT(?,''^&IK8uBo92X04jhAHPUH(Y(8p3)&^ndlkj32'') WHERE personal_id = ''5282''
359 Execute UPDATE personal_info SET first_name = AES_ENCRYPT('''',''^&IK8uBo92X04jhAHPUH(Y(8p3)&^ndlkj32'') WHERE personal_id = ''5282''
359 Close stmt
359 Quit
Como puede ver, mySQL está preparando la consulta INSERT pero no captura el valor de $ value. Cuando elimino el AES_ENCRYPT de $ sql_query, funciona como un encanto:
$stmt = $mysqli->prepare("UPDATE $table SET $name = ? WHERE $id_name = ''$_SESSION[$id_name]''");
$stmt->bind_param(''s'', $value);
Entonces, el problema es con la función AES_ENCRYPT de mySQL. Intenté mover la función a la línea bind_param y esto no funcionó. Alguien tiene alguna idea aquí?
Utiliza b
(blob) para vincular en la versión aes, pero s
(cadena) en la versión no Aes. Pruebe s
en la versión AES: no debería importar dónde aparece un parámetro en una consulta, siempre que no se use para un nombre de campo o tabla.