gpt4 book ai didi

SELECT COUNT 上的 PHP PDO HY093 错误

转载 作者:行者123 更新时间:2023-11-29 23:35:42 25 4
gpt4 key购买 nike

一直在研究周围所有类似的问答,但在我把头撞在墙上超过两天后,我似乎找不到解决方案。

我正在根据用户输入构建一个查询,因此我不会发布所有的胡言乱语。

在查询完成并准备好后,请考虑使用 $binds 这种类型的关联数组 :key => val 来绑定(bind)值。

这是类函数的一部分(仅显示构建查询后的部分):

$stmt = $this->pdo->prepare($stmt);
foreach($binds as $k => $v){
$col = explode('.',substr($k,1));//because all keys start with ':' and some end with '.key'
$col = $col[0];
if($col == 'year'){
$col = 'model_year';
}
$stmt->bindValue($k,$v,$this->tblInfo->pdo_param($col));//tblInfo is a class
//holding an array with column names and types for the table i'm working with
//and a function that returns PDO::PARAM_ type based on the column type
}
if($stmt->execute()){
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
return array('binds' => $binds,$stmt,'err' => $stmt->errorInfo(),'result' => $res);

这是函数的 json_encoded 输出:

{
"binds": {
":make": "audi",
":model": "a4",
":year.1": "2013",
":price.1": "9990",
":gearbox.0": "auto",
":fuel.0": "diesel",
":mileage.0": "0",
":mileage.1": "350000"
},
"0": {
"queryString": "SELECT COUNT(active) AS main FROM ads_auto WHERE active=true
AND has_photo=true AND make=:make AND model=:model AND model_year <= :year.1 AND
price <= :price.1 AND gearbox=:gearbox.0 AND fuel=:fuel.0 AND mileage BETWEEN
:mileage.0 AND :mileage.1"
},
"err": [
"HY093",
null,
null
],
"result": null
}

debugDumpParams():

SQL: [245] SELECT COUNT(active) AS main FROM ads_auto WHERE active=true AND
has_photo=true AND make=:make AND model=:model AND model_year <= :year.1 AND
price <= :price.1 AND gearbox=:gearbox.0 AND fuel=:fuel.0 AND mileage BETWEEN
:mileage.0 AND :mileage.1

Params: 8
Key: Name: [5] :make paramno=-1 name=[5] ":make" is_param=1 param_type=2
Key: Name: [6] :model paramno=-1 name=[6] ":model" is_param=1 param_type=2
Key: Name: [7] :year.1 paramno=-1 name=[7] ":year.1" is_param=1 param_type=1
Key: Name: [8] :price.1 paramno=-1 name=[8] ":price.1" is_param=1 param_type=1
Key: Name: [10] :gearbox.0 paramno=-1 name=[10] ":gearbox.0" is_param=1 param_type=2
Key: Name: [7] :fuel.0 paramno=-1 name=[7] ":fuel.0" is_param=1 param_type=2
Key: Name: [10] :mileage.0 paramno=-1 name=[10] ":mileage.0" is_param=1 param_type=1
Key: Name: [10] :mileage.1 paramno=-1 name=[10] ":mileage.1" is_param=1 param_type=1

显然,$stmt->execute() 的值为 FALSE,因此无法获取。

$binds 数组恰好包含 $stmt 需要绑定(bind)的内容。

我没有使用任何引号。

我读到了有关 COUNT() 和 PDO 的问题,因此我尝试使用 SELECT id 而不是 SELECT COUNT,但自从 $stmt 以来它没有什么区别->execute()FALSE

为什么哦为什么我会得到 HY093?我错过了什么?

将 PHP 5.5 和 MySQL 5.5 与 InnoDB 结合使用。

最佳答案

因此,感谢 @tadman 的建议,我深入研究了 PDO 的源代码,看来问题确实是占位符名称。

根据解析器源代码:

BINDCHR = [:][a-zA-Z0-9_]+;

占位符名称可以是字母数字+下划线,因此添加“.” (点)是一个否。

谢谢指点。现在一切正常。

关于SELECT COUNT 上的 PHP PDO HY093 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26387092/

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