【发布时间】:2023-03-12 22:19:01
【问题描述】:
从我的 PHP 动态生成的预处理语句(例如)如下所示:
SELECT COUNT(exuid) as result_count FROM full_db3 WHERE `Age Range` = :Age Range
Age Range 是我的列名之一。
这里的问题是在我的参数中“年龄”和“范围”之间有空格,但我不知道如何处理这个问题。查询是这样动态生成的(仅显示相关代码):
$all_attributes = $_POST['attris'];
$sql = "SELECT COUNT(exuid) as result_count FROM {$table}";
$any_condition = false;
foreach($all_attributes as $key=>$val) {
if (!empty($val) && in_array($key,$validKeys)) {
if ($any_condition) {
$sql .= ' AND `'.$key.'` = :'.$key;
} else {
$sql .= ' WHERE `'.$key.'` = :'.$key;
$any_condition = true;
}
}
}
$stmt = $dbh->prepare($sql);
foreach($all_attributes as $key=>$val) {
if (!empty($val) && in_array($key,$validKeys)) {
$stmt ->bindValue(':'.$key, $val, PDO::PARAM_STR);
}
}
$stmt->execute();
如果我将数据库中的列名更改为Age_Range,一切正常。出于多种原因,我希望能够排除该下划线,因为我在选择中显示我的列名并且所有下划线看起来都很糟糕。
【问题讨论】:
-
在构建查询时,您不能在条件的右侧用下划线替换空格吗?还是参数名称必须与该 php mysql 库中的字段名称匹配?
-
":" . str_replace(' ', '_', $key) -
你不能只修复架构
-
我同意@Drew;最好为查询而不是输出定制字段名称。当实际显示结果时,您始终可以为结果中的字段添加别名。
-
只是想知道 fred 在带有 ``` 的 cmets 中是如何做到的。高于我的工资等级。尤其是在我欠他 20 美元(加元)之后。
标签: php mysql pdo prepared-statement