【发布时间】:2014-01-04 16:13:34
【问题描述】:
如何在我的脚本中使用mysqli_real_escape_string 来防止 SQL 注入。我正在编写一些代码并在这里提出一些问题,建议我使用mysqli_real_escape_string 而不是mysql_real_escape_string,问题是我的代码在我想要保护的变量之后才建立连接。有人建议我应该使用准备好的语句,但在搜索了http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php 之后,我感到更加困惑。现在,如果代码完全不应该做的事情,它会将空值/行插入我的表中,从我的阅读来看,这可能是因为使用了mysqli_real_escaape_string
感谢任何想法或帮助,我很沮丧和困惑,但仍在努力学习。代码如下:
<?php
//Form fields passed to variables
$manu = mysqli_real_escape_string($_POST['inputManu']);
$model = mysqli_real_escape_string($_POST['inputModel']);
$desc = mysqli_real_escape_string($_POST['inputDesc']);
//Connect to database using $conn
include ('connection.php');
//Insert record into table
$sql = "INSERT INTO gear (`id`,`manu`,`model`,`desc`)
VALUES (NULL,'$manu','$model','$desc')";
//Check for empty fields
if (isset($_POST['submit']))
{
foreach($_POST as $val)
{
if(trim($val) == '' || empty($val))
{
die('Error: ' . mysqli_error());
echo "Please complete all form fields!";
echo "<meta http-equiv='Refresh' content='3; URL=../add.php'>";
}
}
if (!mysqli_query($conn,$sql))
{
die('Error: ' . mysqli_error($conn));
}
else
{
//echo "1 record added";
echo "Success, You added the ".$manu." ".$model."";
echo "<meta http-equiv='Refresh' content='3; URL=../index.php'>";
}
}
else
{
echo "some error";
}
mysqli_close($conn);
?>
【问题讨论】: