나는 게시하기 전에 광범위하게 검색했습니다. :)Ays_ENCRYPT를 사용할 때 Mysqli 준비 문과 관련한 문제
나는 간단한 삽입을 mySQL에 시도하고있다. 준비된 문장을 사용하여 mysqli를 사용하고있다. 아래 코드는 다음과 같습니다.
$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();
예, 코드의 앞부분에있는 mySQL 데이터베이스 서버에 $ mysqli를 선언하고 있습니다. $ key는 스크립트에서 더 일찍 선언됩니다. 당신이 볼 수 있듯이, MySQL은 삽입 쿼리를 준비하고 있지만 $ 값의 값을 캡처하지 않습니다
120104 10:46:18 359 Connect [email protected] 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
: 다음은이 코드가 호출되는 MySQL의 일반적인 로그 파일에 출력됩니다. 나는 $의 sql_query에서 AES_ENCRYPT를 제거하면, 그것은 마법처럼 작동합니다
$stmt = $mysqli->prepare("UPDATE $table SET $name = ? WHERE $id_name = '$_SESSION[$id_name]'");
$stmt->bind_param('s', $value);
그래서 문제가 MySQL을의 AES_ENCRYPT 기능입니다. 함수를 bind_param 행으로 옮겨 보았는데 이것이 작동하지 않았습니다. 누구든지 여기에 아이디어가 있습니까?
예, 데이터를 암호화하기 때문에 데이터를 저장하는 열의 데이터 유형이 varbinary이므로 BLOB을 사용하는 이유가 있습니다. 그러나 나는 이것을 시도하고 다시보고 할 것이다. –
OK, 실제로 문제가 해결되었습니다! AES_ENCRYPT()에 전달 된 첫 번째 매개 변수가 암호화 될 문자열이기 때문에 의미가 있습니다. 나는 AES_ENCRYPT의 결과를 생각하고 있었는데, 그것은 명백히 blob입니다 ... –