gpt4 book ai didi

php - 如何使用PHP PDO查询关键字

转载 作者:行者123 更新时间:2023-11-29 09:27:00 25 4
gpt4 key购买 nike

我有一些代码正在尝试找出如何最好地查询关键字和过滤数据。我不断收到语法错误或访问冲突。如果有人能指出我正确的方向,我将不胜感激。

这是我尝试用于查询关键字和对数据进行排序的代码。

$whereSQL = $orderSQL = ''; 
if(!empty($_POST['keywords'])){
$keywords = $_POST['keywords'];
$whereSQL = "WHERE ad_city LIKE :keywords";
}else{
$keywords = '';
}
if(!empty($_POST['sortBy']) && (strtoupper($_POST['sortBy']) == 'ASC' || strtoupper($_POST['sortBy']) == 'DESC')){
$sortBy = $_POST['sortBy'];
}else{
$sortBy = 'DESC';
}
$orderSQL = " ORDER BY ad_city $sortBy ";

// Count all records
$query = $conn->prepare("SELECT COUNT(*) as rowNum FROM ads $whereSQL $orderSQL");
$query->bindValue(':keywords', '%' . $keywords . '%');
$query->execute();
$row = $query->fetch();
$rowCount = $row['rowNum'];


// Initialize pagination class
$paginationConfig = array(
'baseURL' => $baseURL,
'totalRows' => $rowCount,
'perPage' => $limit,
'currentPage' => $offset,
'contentDiv' => 'postContent',
'link_func' => 'searchFilter'
);
$pagination = new Pagination($paginationConfig);

// Fetch records based on the offset and limit
$query = $conn->prepare("SELECT * FROM ads $whereSQL $orderSQL LIMIT $offset,$limit");
$query->bindValue(':keywords', '%' . $keywords . '%');
$query->execute();
$queryResult = $query->fetchAll();

提前致谢。

最佳答案

您只能将占位符用于值,不能将它们用于表名或列名,也不能将它们用于 ASCDESC 等关键字。您需要使用普通的字符串替换。使用输入验证来防止 SQL 注入(inject)。

if(!empty($_POST['sortBy']) && (strtoupper($_POST['sortBy']) == 'ASC' || strtoupper($_POST['sortBy']) == 'DESC')){ 
$sortBy = $_POST['sortBy'];
}else{
$sortBy = 'DESC';
}
$orderSQL = " ORDER BY ad_city $sortBy ";

此外,您的查询保证返回恰好 1 行。无需检查 $query->rowCount() (它始终为 1)或循环结果。只需获取第一行也是唯一一行。

$query->execute();
$row = $query->fetch();
$rowCount = $row['rowNum'];

关于php - 如何使用PHP PDO查询关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59420443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com