我正在使用这个项目的教程,但是我正在尝试扩展材料中提供的内容。我试图使用一个函数,在绑定值之前创建查询,以创建一个超过3个WHERE值的查询。
以下是代码:
private function action($action, $table, $where = array()){
$operators = array('=', '>', '<', '>=', '<=' , 'AND' ,'OR', 'LIKE', 'GROUP BY','ORDER BY', 'ASC', 'DESC');
if(!empty($where)){
$sql = "{$action} FROM {$table} WHERE ";
if(count($where) > 3){
$isVal = FALSE;
$values = '';
foreach ($where as $value) {
switch(trim($value)){
case '=':
case '>':
case '<':
case '>=':
case '<=':
$sql .= "{$value}";
$isVal = true;
break;
default:
if($isVal){
$sql .= " ? ";
$values .= $value;
$isVal = false;
}else{
$sql .= "{$value}";
}
break;
}
}
if(!$this->query($sql, $values)->error()){return $this;}
/////////////////////////////////////////
// From this point down everything works!!!
////////////////////////////////////////////
}else if(count($where) === 3){
$field = $where[0];
$operator = $where[1];
$value = $where[2];
if(in_array($operator, $operators)){
$sql = "{$action} FROM {$table} WHERE {$field} {$operator} ?"; // NO $value ?
if(!$this->query($sql, array($value))->error()){return $this;}
}
}
}else{
// If array is empty
$sql = "{$action} FROM {$table}";
if(!$this->query($sql)->error()){return $this;}
}
return FALSE;
}
嵌套的Else IF语句读取计数($ where)=== 3的部分工作正常,但是第一个嵌套的IF'计数($ where&gt; 3)`会抛出错误。
我正在尝试找到一种方法来正确设置它,以便我可以使用多于3的值。
此处还有我的查询活页夹:
public function query($sql, $params = array()){
$this->_error = FALSE;
if($this->_query = $this->_pdo->prepare($sql)){
$x = 1;
if(count($params)){
foreach($params as $param){
$this->_query->bindValue($x, $param);
$x++;
}
}// End IF count
if($this->_query->execute()){
$this->_lastID = $this->_pdo->lastInsertId();
try{
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
}catch(Exception $e){
// Catch Error
}
$this->_count = $this->_query->rowCount();
}else{
$this->_error = TRUE;}
}
return $this;
}
如果有人能帮我解决这个问题,我将非常感激......谢谢!
答案 0 :(得分:0)
这里有一些问题,例如:
$values
是一个连接字符串。将它转换为数组将为您提供一个包含1个元素的数组,这不是您需要的。您需要一个包含所有值的数组,例如$values[] = $value;
而不是$values .= $value;
。OR
和AND
语句的组合时会遇到问题,因为使用括号进行分组会产生很大的不同。