gpt4 book ai didi

php - 无法在 php pdo 中按 ASC 为订单运行命名占位符

转载 作者:行者123 更新时间:2023-11-29 02:16:41 25 4
gpt4 key购买 nike

我是 PHP PDO 的新手,正在尝试在 ORDER BY ASC 的位置使用命名占位符。有时在简单的查询页面中运行非常成功但无法在以下查询中运行:

PHP 代码是:

$price_sort = "ASC";
$keyword = "samsung glaxy";
$limit = 0;
$query = $db->prepare("SELECT *, MATCH(title) against (:keyword) as 'relevence'
FROM view_store_items_grid
WHERE MATCH(title) against(:keyword)
ORDER BY relevence DESC, price :order
LIMIT :limit,25");
$query->bindValue(":keyword",$keyword);
$query->bindValue(":order",$price_sort);
$query->bindValue(":limit", $limit, PDO::PARAM_INT);
$query->execute();

当我使用 ASC 删除占位符 :order 时运行并给出结果,但是当我使用此占位符时,我得到空结果。

为了获取数据或显示我正在使用的获取结果

while ($row = $query->fetch(PDO::FETCH_ASSOC)) :
extract($row);
echo "$name";
endwhile;

我做错了什么以及如何在不同地方的查询中使用多个命名占位符

最佳答案

您不应该在准备好的语句中绑定(bind) ASC/DESC。参数是自动引用的,ASC/DESC 不应该被引用。这与表名和列名不能作为参数的原因相同。

你也可以这样做

$sql_query = "SELECT *, MATCH(title) against (:keyword) as 'relevence'
FROM view_store_items_grid
WHERE MATCH(title) against(:keyword)
ORDER BY relevence DESC, price "
if($price_order == 'ASC'){
$sql_query .= " ASC "
}else{
$sql_query .= " DESC "
}
$sql_query .= " LIMIT :limit,25 "
$query = $db->prepare($sql_query);

引用How bindValue in LIMIT

引用pdo binding asc/desc order dynamically

也不要尝试在单个 SQL 语句中两次使用相同的命名参数,例如

<?php 
$sql = 'SELECT * FROM some_table WHERE some_value > :value OR some_value < :value';
$stmt = $dbh->prepare($sql);
$stmt->execute( array( ':value' => 3 ) );
?>

...这将不返回任何行,也不返回任何错误——每个参数必须且仅使用一次。显然,由于可移植性问题,这是预期的行为(根据此错误报告:http://bugs.php.net/bug.php?id=33886)。

关于php - 无法在 php pdo 中按 ASC 为订单运行命名占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38478654/

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