Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách viết truy vấn mysql để kiểm tra nhiều lựa chọn biến trong đó gửi biểu mẫu có thể khớp với 1 0f 5 trường

Cá nhân tôi không giỏi thực hiện các chuỗi truy vấn MySQL, tôi thường sử dụng một lớp trình biên dịch sql tương tự như lớp này (hãy nhớ rằng, đây chỉ là một lớp nhanh). Nó cho phép ràng buộc mà bạn yêu cầu, đặc biệt là với $_GET các giá trị như bạn có:

class ItemQueue
    {
        protected   $sql;
        protected   $wherevals;
        public      $bind;
        public      $compiled;

        public function select($values = false)
            {
                $this->sql[] = "select";
                if($values == false)
                    $this->sql[]    =   "*";
                else
                    $this->sql[]    =   $values;

                return $this;
            }

        public function from($table = false)
            {
                if($table ==false)
                    return $this;

                $this->sql[] = "from `$table`";

                return $this;
            }

         public function where($values = array(),$op = 'and')
            {
                if(!empty($values)) {
                        $this->sql[]    =   'where';
                        foreach($values as $key => $values) {
                                $this->wherevals[]      =   $key.' = :'.$key;
                                // Bind values for injection protection
                                $this->bind[":$key"]    =   $values;
                            }

                        $this->sql[]        =   implode(" $op ",$this->wherevals);
                        // This part is a bit jenky but you get the idea
                        $this->sql[]        =   "and active = '1'";
                    }

                return $this;
            }

        public  function customsql($values = false)
            {
                if($values != false) {
                        $this->sql[]    =   $values;
                    }

                return $this;
            }

        public  function Fetch()
            {
                // Implode entire sql statement
                $this->compiled =   implode(" ", $this->sql);

                return $this;
            }
    }

    // Post/Get values
    $_POST['cat']   =   'cattest';
    $_POST['city']  =   'Reno';
    $_POST['state'] =   'Nevada';

    // Arbitrary limits
    $limit          =   1;
    $limitvalue     =   1;
    // Create instance
    $tester =   new ItemQueue();
    // Just set some array filtering/validating
    if(isset($_POST['cat']) && !empty($_POST['cat']))
        $array['cat']   =   $_POST['cat'];

    if(isset($_POST['city']) && !empty($_POST['city']))
        $array['city']  =   $_POST['city'];

    if(isset($_POST['state']) && !empty($_POST['state']))
        $array['state'] =   $_POST['state'];

    // Make the query
    $query  =   $tester->select()->from("items")->where($array,"or")->customsql("ORDER BY item_id DESC LIMIT $limitvalue, $limit");

    // Here is the sql statement
    echo $query->Fetch()->compiled;

    // Bind array
    print_r($query->bind);

Cung cấp cho bạn:

select * from `items` where cat = :cat or city = :city or state = :state and active = '1' ORDER BY item_id DESC LIMIT 1, 1

Array
    (
        [:cat] => cattest
        [:city] => Reno
        [:state] => Nevada
    )

Lưu ý, điều này yêu cầu bạn sử dụng kết nối thích hợp (PDO hoạt động tốt nhất trong trường hợp này).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Tham gia bên trong so với Ở đâu

  2. MySQL:Không chèn một hàng mới nếu các hàng được xác định giống nhau

  3. Trả về một biến sql cho PHP

  4. Sự cố biên dịch với MySQL C API trên MAC OS X 10.6

  5. Trả lời nhận xét nhiều tầng:Hiển thị và Lưu trữ