我尝试在我的网站上添加搜索功能,但用户可以使用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个绑定变量。
答案 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语句而没有那么多,因此出现错误消息?