使用MySQLi Real Escape字符串和MySQLi Set Charset UTF8是否可以防止PHP中的SQLi注入?

时间:2019-05-28 20:37:55

标签: php mysql mysqli sql-injection

我正在设置一个Web应用程序。

使用mysqli_real_escape_string()mysqli_set_charset('utf8')来可靠地防止SQL注入而不使用准备好的语句是否可靠?

我已经尝试过单独使用mysqli_real_escape_string(),但发现它容易受到SQL注入的攻击。我以为也许我设置一个字符集utf8就能解决?

我在想这样的事情

mysqli_set_charset($conn, 'utf8');
$email = mysqli_real_escape_string($conn, $_POST['email']);
mysqli_query($conn,"INSERT INTO email_list VALUES (NULL, '".$email."');");

如果我完全错了,我正在寻找一种可靠的方法来防止SQL注入而没有准备好的语句

我之所以避免使用准备好的语句,是因为对于一个查询来说,这一切似乎都太复杂了。

谢谢!

1 个答案:

答案 0 :(得分:-5)

我建议使用filter_input方法:

https://www.php.net/manual/en/function.filter-input.php
https://www.php.net/manual/en/filter.filters.php

例如:

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);