Не могу вставить хешированные данные в базу данных Wordpress - PullRequest
2 голосов
/ 16 апреля 2020

Я сделал функцию, которая генерирует случайную строку 21 di git, используя wp_generate_password(), хэширует ее, используя wp_hash(), сохраняет сгенерированную строку в базу данных и return s хэшированную строку. Работает отлично. Тем не менее, я хочу сделать другой путь, вместо сохранения сгенерированной случайной строки в базу данных, я хочу сохранить хешированную строку и return случайную строку.

Но это не работает. Когда я пытаюсь сохранить хешированную строку в базе данных, она просто не создает никакой записи. Прекрасно работает, если я хочу сохранить случайную строку.

Я пытался санировать хешированную строку, применил strval(), применил $wpdb->insert с format, где я объявил ее как строку. Ничего не работает! Я даже пытался увеличить ресурсы сервера до 4 ГБ оперативной памяти, процессоры 2Vcore. Увеличено ограничение ресурса php .ini до 3 ГБ. Ничего не работает.

Вот функция, которая отлично работает. Однако в этой функции я хочу заменить 'verification_code'=>$email_verification на 'verification_code'=>$email_verification_hashed, и это не работает. Я хочу, чтобы это работало, поэтому хэшированная строка отправляется в базу данных, а случайная строка возвращается.

function generate_verification($user_id) {
$user_info = get_userdata($user_id);
$email_verification = wp_generate_password( 21, true, true );
$email_verification_hashed = wp_hash( $email_verification );
if (isset($user_info)) {
    global $wpdb;
    $table_name = $wpdb->base_prefix.'custom_table'; //already exist        
    $user_email = $user_info->user_email;   
    $data = array('email'=>$user_email, 'verification_code'=>$email_verification, 'user_id'=>$user_id);
    $where = array('user_id'=>$user_id);
    $existing_data = "SELECT * FROM {$wpdb->prefix}custom_table WHERE user_id = {$user_id}";
    $existing_data_results = $wpdb->get_results($query);

    if($existing_data_results > 0) {
        $wpdb->update( $table_name, $data, $where);
        return $email_verification_hashed;
    } else {
        $wpdb->insert( $table_name, $data);
        return $email_verification_hashed;
    }   
} else {
    return 'Failed';
}

}

1 Ответ

0 голосов
/ 16 апреля 2020

Это была глупая ошибка, столбец базы данных был VARCHAR(21), а строка хеширования была намного длиннее. Я просто изменил столбец на VARCHAR(255) и теперь он работает

...