此代码是否受 SQL 注入保护?

Is this code protected for SQL injection?

这样够安全吗?还是应该改进?此代码是否受 SQL 注入保护? (PHP)

if (isset($_POST['mailSet'])) {
$asd=filter_input(INPUT_POST, 'TypeM', FILTER_SANITIZE_NUMBER_INT);
$zxc=filter_input(INPUT_POST, 'mailFor', FILTER_SANITIZE_NUMBER_INT);
global $wpdb;

try {
    $wpdb->get_row($wpdb->prepare("UPDATE mail_sttng set setting_val=%d
    WHERE setting=1
    ", $asd));
    $wpdb->get_row($wpdb->prepare("UPDATE mail_sttng set setting_val=%d
    WHERE setting=2
    ", $zxc));


bla bla...

可能不会。您可能应该这样做:

$wpdb->get_row($wpdb->prepare("UPDATE mail_sttng set setting_val=%d
    WHERE setting=1
    ", htmlspecialchars($asd)));

如果 setting_val 不是字符串字段,您可能需要验证是否也传递了正确的数据类型

我想当然地认为$wpdbfrom the WordPress project

然后作为explained by the documentation,这些占位符的目的就是防止SQL注入。

因此您可以认为您的代码可以安全地抵御 SQL 注入。

我个人喜欢尽快将我的值转换为正确的类型,现在也许这就是 filter_input 的目的,我不知道。

$asd = (int) filter_input(INPUT_POST, 'TypeM', FILTER_SANITIZE_NUMBER_INT);
$zxc = (int) filter_input(INPUT_POST, 'mailFor', FILTER_SANITIZE_NUMBER_INT);