我最近使用html表单,php和mysqli创建了一个搜索引擎。它所做的是我在我的mysql数据库中搜索的形式中放入的任何术语,并将其回显到我的html页面上。到目前为止,它按我的意愿工作。但是我看到人们警告Mysql注入攻击我从这个引擎制作了这个引擎所以任何人都可以检查下面的代码并给我一个建议。
<?php
$k = mysqli_real_escape_string($_GET['k']);
$terms = mysqli_real_escape_string(explode(" ", $k));
$query = "SELECT * FROM xaplinks WHERE ";
$i = 0;
foreach ($terms as $each) {
$i++;
if ($i == 1) {
$query .= "xap_name LIKE '%$each%'"; }
else {
$query .= "OR xap_name LIKE '%$each%'"; }
}
$con = mysqli_connect('mysql.hostinger.in','steve','password', 'win');
$query = mysqli_real_escape_string(mysqli_query($con, $query));
$numrows = mysqli_num_rows($query);
if ($numrows > 0) {
while ($row = mysqli_fetch_assoc($query)) {
$name = $row['xap_name'];
$link = $row['xap_link'];
echo "<a href='$link'>$name</a></br>";
}
}
else {
echo "No results found. :( ";
}
mysqli_close($con);
?>
我在网上看到mysqli中的转义字符串可以帮助防止注入,所以我已经使用它但不确定它是否正确实现。我是mysqli的新手。
任何帮助/提示将不胜感激,提前致谢。 :)
答案 0 :(得分:1)
使用PDO类而不是mysqli类。此外,请使用prepared statements。
答案 1 :(得分:0)
您可以使用mysqli-&gt; prepare
创建预备语句应该解决你的问题。
$queryPrepared = mysqli->prepare($query)
在此处查看更多信息。 PHP MySQLI Prevent SQL Injection