PDO MySQL准备语句与可选的语句
问题描述:
我正在从一个表单提交的查询,有多种搜索选项,可以或不可以包含在我的查询中。有没有更好的方式来动态地做到这一点,因为这似乎没有工作?我不断收到错误Fatal error: Call to a member function fetchAll() on boolean
。我知道这里有很多事情要做,我不想花大量的代码来通读。所以长话短说,当我回应$ sql时,我的select语句看起来不错,但无论我做什么,我都会收到同样的错误,告诉我这个语句有什么问题。这种方法甚至可行吗?还是我需要使用其他方法?如果是的话,什么是更好的方法?PDO MySQL准备语句与可选的语句
$sql = "SELECT DISTINCT mt.id, mt.name, mt.phone
FROM main_table mt
LEFT JOIN jnct_tbl_srvstate st ON mt.id = st.mt_id
LEFT JOIN jnct_tbl_equip eq on mt.id = eq.mt_id
LEFT JOIN jnct_tbl_accessory ac ON mt.id = ac.mt_id
LEFT JOIN tbl_car c ON mt.id = c.mt_id
WHERE mt.id = c.id";
if($state_array_count != 0){
$sql.= " AND srvstate_id IN ($st_holders)";
}
if($equip_array_count != 0){
$sql.= " AND equip_id IN ($eq_holders)";
}
if($accessory_array_count != 0){
$sql.= " AND accessory_id IN ($ac_holders)";
$sql.= " ORDER BY mt.id";
$query = $db->prepare($sql);
结合上面的if语句是我真正需要帮助的。
if($state_array_count != 0){
foreach($state_array as $st_placeholder => $st_value) {
if($st_value != '') {
$st_placeholder = ":$st_placeholder";
$query->bindValue($st_placeholder, $st_value);
}
}
}
if($equip_array_count != 0){
if($eq_value != '') {
foreach($equip_array as $eq_placeholder => $eq_value) {
$eq_placeholder = ":$eq_placeholder";
$query->bindValue($eq_placeholder, $eq_value);
}
}
}
if($accessory_array_count != 0){
foreach($accessory_array as $ac_placeholder => $ac_value) {
if($ac_value != '') {
$ac_placeholder = ":$ac_placeholder";
$query->bindValue($ac_placeholder, $ac_value);
}
}
}
$results = $query->execute();
$rs = $results->fetchAll(PDO::FETCH_ASSOC);
答
的方法不返回一个结果对象。它返回一个布尔值,true或false。
fetchAll()
是PDOStatement对象的一种方法。这里有一个例子:
$sth = $dbh->prepare($sql);
$sth->execute();
$result = $sth->fetchAll();
谢谢Bill!这在30秒左右就修好了。我有所有复杂的东西是正确的,但真的设法弄错了PDO。 – zcleft