php - 在准备好的语句中传递带有空格的参数

标签 php mysql pdo prepared-statement

从我的 PHP 动态生成的准备好的语句(作为示例)如下所示:

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();

如果我将数据库中的列名称更改为 Age_Range 一切都工作得很好。由于多种原因,我希望能够排除该下划线,因为我在选择中显示我的列名称,并且所有下划线看起来都很糟糕。

最佳答案

使用我的想法,并从 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 - 在准备好的语句中传递带有空格的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32234666/

相关文章:

php - 摆脱日期codeigniter中的单引号

php - Database_Exception [2]:mysqli_connect():服务器向客户端发送了未知的字符集(255)。请向开发商报告

php - 如何为用户显示电子邮件地址但对机器人隐藏?有没有使用 PHP、Javascript 或 Jquery 的简单方法?

mysql - 如何在ID为max的数据库表中插入值

php - 清理用户密码

php - PDO多类别选择和注册

php - 动态表单、PHP 和 MYSQL

mysql - 如何在 shell 变量中存储多行 sql 查询?

MYSQL varchar 迄今为止

php - 如何使用 PDO 设置时区