簡體   English   中英

PHP 帶有搜索和運算符的 CRUD 操作

[英]PHP CRUD operations with search, and operator

我在下面使用 function (我從互聯網上得到的)從數據庫中獲取數據並且工作正常。 如果我使用 where 和搜索條件不能正常工作或者我錯過了一些東西。 任何人都可以幫我解決這個問題。

public function getRows($table,$conditions = array()){
    $sql = 'SELECT ';
    $sql .= array_key_exists("select",$conditions)?$conditions['select']:'*';
    $sql .= ' FROM '.$table;
    if(array_key_exists("where",$conditions)){
        $sql .= ' WHERE ';
        $i = 0;
        foreach($conditions['where'] as $key => $value){
            $pre = ($i > 0)?' AND ':'';
            echo $sql .= $pre.$key." = '".$value."'";
            $i++;
        }
    }
    if(array_key_exists("search",$conditions)){
        $sql .= (strpos($sql, 'WHERE') !== false)?'':' WHERE ';
        $i = 0;
        foreach($conditions['search'] as $key => $value){
            $pre = ($i > 0)?' OR ':'';
            $sql .= $pre.$key." = '".$value."'";
            $i++;
        }
    }
    if(array_key_exists("order_by",$conditions)){
        $sql .= ' ORDER BY '.$conditions['order_by']; 
    }

    if(array_key_exists("start",$conditions) && array_key_exists("limit",$conditions)){
        $sql .= ' LIMIT '.$conditions['start'].','.$conditions['limit']; 
    }elseif(!array_key_exists("start",$conditions) && array_key_exists("limit",$conditions)){
        echo $sql .= ' LIMIT '.$conditions['limit']; 
    }

    $query = $this->conn->prepare($sql);
    $query->execute();

    if(array_key_exists("return_type",$conditions) && $conditions['return_type'] != 'all'){
        switch($conditions['return_type']){
            case 'count':
                $data = $query->rowCount();
                break;
            case 'single':
                $data = $query->fetch(PDO::FETCH_ASSOC);
                break;
            default:
                $data = '';
        }
    }else{
        if($query->rowCount() > 0){
            $data = $query->fetchAll();
        }
    }
    return !empty($data)?$data:false;
}

Function 與 where 和 Search 條件一起使用

if(!empty($_POST['customer_number'])) {    
    $ajaxData = $auth_user->getRows(
        'tablename', 
        array('where' => array('fieldName'=>$doc)),
        array('search'=> array('fieldname1'=>$_POST['customer_number'], 'fieldname2'=>$_POST['customer_number']))
    );
}

上面代碼的結果是

SELECT * FROM tablename WHERE cust_consum_type = '1'

預期結果是。

select * from tablename where fieldName='somevalue' and fieldname1='somevalue' OR fieldname2='somevalue'

幫我解決這個問題。

這個 function 在很多層面上都是錯誤的,首先是嚴重不安全。

相反,使用香草 PDO。 以這種方式制作您的 function

public function getRows($sql,$input = array()){
    $stmt = $this->conn->prepare($sql);
    $stmt->execute($input);
    return $stmt;
}

然后立即使用占位符編寫查詢,在 pparameters 中傳遞數據並獲得結果:

$sql = "select * from tablename where fieldName=:fieldName 
       and (fieldname1=:fieldName1 OR fieldname2=:fieldName2)";
$input = ['fieldName'=>$doc,
         'fieldname1'=>$_POST['customer_number'],
         'fieldname2'=>$_POST['customer_number']];
$data = $db->getRows($sql, $input)->fetchAll();

它將是安全的、干凈的、始終工作的、安全的、靈活的、不受 SQL 注入和語法錯誤的影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM