我试图了解何时应该在 php/mysqli 中使用准备好的语句。每个 php/mysqli 查询都应该使用准备好的语句还是只使用涉及用户输入的查询和实例……例如要求用户输入数据以在数据库中搜索的 html 表单?
我正在将旧的 php5/mysql 代码迁移到 php7/mysqli。我有许多查询 mysql 数据库的 php 文件。如果我需要为连接到 mysql db 的每个 php 文件使用准备好的语句,我想澄清一下……例如,通过“php require”引用的 php 文件并包含简单的 sql select 语句来呈现图像和指向 html 的链接页?
<?php
//establish connection
$con = new mysqli('localhost','uid','pw','db');
//check connection
if ($con->connect_error) {
die("Connection failed: " . $con->connect_error);
}
//search variable that stores user input
$search = "%{$_POST['search']}%";
//prepare, bind and fetch
$stmt = $con->prepare("SELECT image, caption FROM `tblimages`
WHERE catid = 3 AND caption LIKE ? order by caption ASC");
$stmt->bind_param("s", $search);
$stmt->execute();
$stmt->bind_result($image,$caption);
while ($stmt->fetch()) {
echo "{$image} <br> {$caption} <br>";
}
$stmt->close();
//close database connection
mysqli_close($con);
?>
上面的代码有效并且是我第一次使用准备好的语句。它从表单(空白框输入搜索词 - POST)获取用户输入并搜索 db ... 然后将结果呈现到 html 页面。这似乎是准备好的语句的合乎逻辑的用法。但是...我有其他 php 文件,其中用户从表单中的下拉框中选择数据以呈现结果(用户不会像上面那样将数据输入到搜索框中)。我是否也为该实例使用准备好的语句?另外,我是否对通过“php require”引用的 php 文件使用准备好的语句,并包含简单的 sql select 语句来呈现图像和指向 html 页面的链接?我还没有找到使用准备好的语句来防止 sql 注入的特定实例的说明。欢迎任何澄清或参考。
扬帆大鱼