PHP PDO - 动态绑定(bind)变量数

标签 php mysql pdo

我正在尝试在我的网站上添加搜索功能,用户可以使用 4 种不同的输入,尽管他们可能不会使用全部 4 种。我根据他们填写的输入附加到我的 sql 查询;

$query = "SELECT * FROM cars WHERE status = 2 ";
if($_GET['ref']){
  $query .= " AND ref = :ref";
}
if($_GET['doors']){
  $query .= " AND doors = :doors";
}
if($_GET['wheels']){
  $query .= " AND wheels = :wheels";
}
if($_GET['location']){
  $query .= " AND location = :location";
}
$query .= ")";

$adverts = Singlequery ($query, array(              
        'ref' => $_GET['ref'],
        'doors' => $_GET['doors'],
        'wheels' => $_GET['wheels'],
        'location' => $_GET['location']
), $conn);

这是我正在使用的查询 -

function query($query, $bindings, $conn)
{
    $stmt = $conn->prepare($query);
    $stmt->execute($bindings);

    return $stmt;
}

我收到错误 -

PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

我认为它期望使用所有 4 个输入,因此需要 4 个绑定(bind)变量。

最佳答案

首先,您的查询中缺少括号。您正在关闭它而不是打开它。

您还应该在 if 子句中创建变量数组:

$query = "SELECT * FROM cars WHERE status = 2 ";
$data=array();
if($_GET['ref']){
  $query .= " AND ref = :ref";
  $data['ref']=$_GET['ref'];
}
if($_GET['doors']){
  $query .= " AND doors = :doors";
  $data['doors']=$_GET['doors'];
}
if($_GET['wheels']){
  $query .= " AND wheels = :wheels";
  $data['wheels']=$_GET['wheels'];
}
if($_GET['location']){
  $query .= " AND location = :location";
  $data['location']=$_GET['location'];
}

$adverts = Singlequery($query, $data, $conn);

关于PHP PDO - 动态绑定(bind)变量数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27545655/

相关文章:

php - MYSQL/PHP : Select identical numbers in different rows

php - 通过 php 读取二进制文件并通过 shell 上的 exec 保存它

php - PHP 数据库基类是否应该创建多个连接?

mysql 选择具有相同 ID 的行并保留它们的顺序?

php - 使用 PDO 插入 NULL 而不是空字符串

php - {"error_type": "OAuthException", "code": 400, "error_message": "Invalid redirect_uri"}

mysql - 在两个模型上使用 hasMany 处理 Sequelize Eager Load Error

PHP PDO : SQLSTATE[HY000] [2002] Connection refused

pdo - centos7如何安装pdo-mysql

php - 获取id值 PHP、mysql、jquery