我有一些图片是用PHP从MySQL数据库输出到页面上的.输出它们的while
循环包括一个联接,因为它从两个数据库表(imageposts
表和users
表)获取数据.
使用当前输出运行查询,但由于没有用户输入,因此使用以下代码:
<?php
// IMAGE GRID JOIN
$stmt = $connection->query("SELECT imgp.*, u.id, u.firstname, u.lastname
FROM imageposts AS imgp
INNER JOIN users AS u ON imgp.user_id = u.id");
while ($row = $stmt->fetch()) {
// from imageposts table
$db_image_id = htmlspecialchars($row['image_id']);
$db_image_title = htmlspecialchars($row['image_title']);
$db_image_filename = htmlspecialchars($row['filename']);
$db_ext = htmlspecialchars($row['file_extension']);
$db_username = htmlspecialchars($row['username']);
// from users table
$db_firstname = htmlspecialchars($row['firstname']);
$db_lastname = htmlspecialchars($row['lastname']);
?>
-- HTML OUTPUT
<?php } ?>
The Issue
我还在为这个网站设置我的第一个搜索表单,当图像被输出时,我想让它们输入与上面相同的信息(除了搜索查询),但是因为它是一个搜索表单,有用户输入,我需要使用一个准备好的声明,我无法理解如何处理这个问题?
搜索将在imageposts
表的image_title
列上进行,因此就sudo代码而言:
$searchSQL = "SELECT * FROM `imageposts` WHERE `image_title` LIKE %$searchQuery% ";
其中,$searchQuery
是搜索输入字段的值.
但我如何将其与问题第一部分中的查询结合起来,并使用一个预先准备好的语句来保证安全性呢?
MySQL会是这样吗?:
"SELECT imgp.*, u.id, u.firstname, u.lastname
FROM imageposts AS imgp
INNER JOIN users AS u ON imgp.user_id = u.id WHERE image_title LIKE %$searchQuery%"
如果是这样的话,我该如何确保$searchQuery
号上准备好的声明的安全性?