PHP PDO - 动态绑定变量数

时间:2014-12-18 11:35:29

标签: 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个绑定变量。

4 个答案:

答案 0 :(得分:4)

首先,您的查询中有一个缺少的括号。你正在关闭但没有打开。

您还应该在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);

答案 1 :(得分:0)

尝试使用?代替:alias格式。

答案 2 :(得分:0)

也许您可以尝试说"如果此变量为空,请将其设置为Null"那么保持为空的变量将是Null而不是undefined。

答案 3 :(得分:0)

可能是因为你总是为它提供一个大小为4的数组来绑定,而你的查询字符串有时因if语句而没有那么多,因此出现错误消息?

相关问题