Проблема с подготовленным Mysqli оператором при использовании AES_ENCRYPT - PullRequest
3 голосов
/ 04 января 2012

Я много искал перед публикацией.:)

Я пытаюсь сделать простую вставку в MySQL.Я использую MySQL, используя подготовленные заявления.Ниже приведен код:

$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();

Да, я заявляю, что $ mysqli с подключением к серверу базы данных mySQL ранее в коде.$ key также объявлен ранее в скрипте.Ниже приведен вывод в общий файл журнала mySQL при вызове этого кода:

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

Как видите, mySQL готовит запрос INSERT, но не захватывает значение $ value.Когда я удаляю AES_ENCRYPT из $ sql_query, он работает как шарм:

$stmt = $mysqli->prepare("UPDATE $table SET $name = ? WHERE $id_name = '$_SESSION[$id_name]'");
$stmt->bind_param('s', $value);

Так что проблема в функции AES_ENCRYPT в MySQL.Я попытался переместить функцию в строку bind_param, но это не сработало.У кого-нибудь есть идеи?

1 Ответ

3 голосов
/ 04 января 2012

Вы используете b (blob) для привязки в версии aes, но s (строка) в версии не aes.Попробуйте s в версии AES - не имеет значения, ГДЕ в параметре появляется параметр, если он не используется для имени поля или таблицы.

...