Возврат результатов из двух таблиц в базе данных WordPress - PullRequest
0 голосов
/ 09 июля 2019

У меня есть две таблицы:

lic_key_tbl

name    license_key     email
----------------------------------------
john    95g12dhp0       john@example.com
cath    bdjagdlo8       cath@example.org
john    8nawjdcms       john@example.com
alex    mhi79y32p       alex@alex.com

lic_reg_domain_tbl

lic_key     registered_domain
-----------------------------
95g12dhp0   google.com
8nawjdcms   abc.com
bdjagdlo8   microsoft.com
mhi79y32p   facebook.com

В основном я пытаюсь отобразить список зарегистрированных доменов, которые принадлежат текущему вошедшему в систему пользователю (в этом примере сценария представьте, что я вошел в систему как john@example.com), сравнивая соответствующие лицензионные ключи из каждой таблицы.

Я знаю, что этот код неполон ...

/* User info */
global $userdata;
$user_info              = get_userdata($user_ID);
$user_email             = $userdata->user_email;

/* DB table names */
global $wpdb;
$lic_key_table          = $wpdb->prefix . 'lic_key_tbl';
$lic_reg_domain_table   = $wpdb->prefix . 'lic_reg_domain_tbl';

$results = $wpdb->get_results("SELECT * FROM $lic_reg_domain_table);

foreach ( $results as $result ) { ?>

    <li>
        <?php echo $result->registered_domain; ?>
    </li>

<?php } 
?>

... но если я вошел как john@example.com, то результаты, которые я вижу, должны быть:

google.com
abc.com

Надеюсь, это имеет смысл.

1 Ответ

1 голос
/ 09 июля 2019

Используйте подготовленные операторы для предотвращения атак с использованием SQL-инъекций.

global $userdata;
$user_info              = get_userdata($user_ID);
$user_email             = $userdata->user_email;

$login_name             = $userdata->user_login;
$nicename             = $userdata->user_nicename;

/* DB table names */
global $wpdb;
$lic_key_table          = $wpdb->prefix . 'lic_key_tbl';
$lic_reg_domain_table   = $wpdb->prefix . 'lic_reg_domain_tbl';


//get the registered_domain based on a related column (license_key and lic_key) between them. and check if email is equal to current login use email
$sql =  "
    SELECT *
    FROM $lic_reg_domain_table d, $lic_key_table k  
    WHERE k.license_key = d.lic_key and k.email =%s 
    ";

// Prepare the SQL statement so the string input gets escaped for security.
$sql = $wpdb->prepare( $sql, $user_email );

$results = $wpdb->get_results($sql);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...