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

标签 php mysql pdo

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

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

$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/

相关文章:

php - 带有 UNIX_TIMESTAMP 的 MySQL 查询不工作

php - 警告:PDOStatement::execute(): SQLSTATE[HY093]

mysql - 使用过程变量创建服务器端准备好的语句 - MySQL

PHP PDO SQL_CALC_FOUND_ROWS/FOUND_ROWS() 奇怪的问题

php - PDO 不能绑定(bind)两个属性

php - 如何修复mysql中的 'foreign key constraint fails'

php - 是否需要验证 $_SERVER ['REMOTE_ADDR' ]?

php - 将 Composer 文件从本地主机传输到服务器

php - 如何遍历表单中的输入数组?

php - 从搜索框中获取内容在数据库中查找它