我在这里正确使用$ mysqli-> real_escape_string吗?

时间:2018-07-17 09:46:34

标签: php mysql sql

我不想受到SQL注入的攻击。谁能告诉我我是否在这里正确使用$ mysqli-> real_escape_string?目前,我仅在$ name变量上使用它。我对php和数据库没有太多经验。

// Insert our data
  $sql = "INSERT INTO kliendid (`id`, `name`, `email`, `uudiskiri`) VALUES (NULL, $mysqli->real_escape_string('${name}'), '${email}', '${uudiskiri}')";
  $insert = $mysqli->query($sql);

  // Close connection
  $mysqli->close();

1 个答案:

答案 0 :(得分:0)

如果id是自动递增的,则在语句中将其忽略。

$stmt = $mysqli->prepare("INSERT INTO kliendid (`name`, `email`, `uudiskiri`) VALUES (?,?,?)");
$stmt->bind_param('ssi', $email, $email, $uudiskiri);

$stmt->execute();
$stmt->close();

“ ssi”是什么意思,这意味着您要告诉语句要发送的值是:第一个为“字符串”,第二个为“字符串”,第三个为“整数”,并根据注释,是一个很好的主意,在询问之前进行深入研究,大约5分钟后我就构建了您的代码,又花了我5个小时来进行研究。

要回答您的问题,不,您没有正确使用mysqli_real_escape_string,这是使用它的方式:

$var1escaped = mysqli_real_escape_string($var1)
$var2escaped = mysqli_real_escape_string($var2)
$varNescaped = mysqli_real_escape_string($varN)

然后,您将转义的变量发送到查询中,但仍然不能像准备好的语句一样安全。

我希望这会有所帮助,很高兴有人愿意构建安全的代码。