Php 在prepared语句中用空格传递参数
作为示例,从my PHP动态生成的prepared语句如下所示:Php 在prepared语句中用空格传递参数,php,mysql,pdo,prepared-statement,Php,Mysql,Pdo,Prepared Statement,作为示例,从my PHP动态生成的prepared语句如下所示: SELECT COUNT(exuid) as result_count FROM full_db3 WHERE `Age Range` = :Age Range 年龄范围是我的列名之一 这里的问题是在我的参数中有介于年龄和范围之间的空间,但我不确定如何处理这个问题。查询是动态生成的,因此仅显示相关代码: $all_attributes = $_POST['attris']; $sql = "SELECT COUNT(ex
SELECT COUNT(exuid) as result_count FROM full_db3 WHERE `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();
如果我将DB中的列名更改为Age_范围,那么一切都可以正常工作。出于许多原因,我希望能够排除该下划线,因为我在select中显示了我的列名,而所有的下划线看起来都很糟糕 用我的想法,从u_mulder的评论中复制语法,这应该行得通吗
$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.'` = :'.str_replace(' ', '_', $key);
} else {
$sql .= ' WHERE `'.$key.'` = :'.str_replace(' ', '_', $key);
$any_condition = true;
}
}
}
它保持字段名称不变,只更改参数名称
但是这个
$stmt ->bindValue(':'.$key, $val, PDO::PARAM_STR)
可能也需要对此进行更改
$stmt ->bindValue(':'.str_replace(' ', '_', $key), $val, PDO::PARAM_STR)
在生成查询时,不能在条件的右侧用下划线替换空格吗?或者参数名必须与php mysql库中的字段名匹配吗?:。str_replace“”,''.',$key难道你就不能用@Drew-Through来修复这个模式吗;最好将字段名定制为在查询中使用,而不是输出。当结果中的字段实际显示时,您总是可以在其中使用别名。只是想知道fred是如何在带有“`”的注释中这样做的。高于我的工资等级。特别是在我欠他20加元之后。这不管用。我怀疑这是因为查询是如何执行的。查看我编辑过的答案,它显示了这是如何做到的。我想参数与键的名称是否相同并不重要,只要传递了正确的值。@jonmrich是的,因为参数名称已更改,所以也需要更改。请参阅编辑。与编辑完美配合!非常感谢。现在…你能告诉我为什么这样我就不会再问同样的问题了吗?我想不到它在有或没有编辑的情况下都会这样工作。@jonmrich:prefixed部分是您的参数名;所附的是字段名。您的参数名称也可以是:p1、:p2等。。。通过预处理,您可以使查询只需要解析一次,但在这种情况下没有任何好处;参数通过为您执行所有特殊字符转义,使您的参数更安全。感谢您提供的额外信息。在这里,我肯定还有很多东西要学。