我错过了什么? SQL 注入

What am I missing? SQL injection

我正在尝试尽可能地过滤掉以防止讨厌的 SQL 注入,这是我的代码示例,我是否遗漏了什么?

$name = htmlspecialchars($row['name']);
echo '<div class="col-sm-7">'.$name.'</div>';

在我的 html 代码中 ^

if( $_POST["name"] ) {
 if (preg_match("/[^A-Za-z'-]/",$_POST['name'] )) {
     die ("Invalid characters.");
}

$name = mysqli_real_escape_string($conn, trim($_POST['name']));

所以我的代码包括以上这些,是否有任何我遗漏的东西可以进一步阻止?

再问一个问题

既然这些数据不是来自我的表单,我是否必须过滤掉我自己的定义?例如

$currentdate = mysqli_real_escape_string($conn, trim(date("Y-m-d h:i:sa")));

我个人认为您适合 SQL 注射,但我会看看评论中的一些人在说什么。

另一方面,与 SQL 注入无关,您可能需要考虑在 $name 上使用 strip_tags 以及删除任何不需要的 HTML 字符。