Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एकाधिक चर चयनों की जांच के लिए mysql क्वेरी कैसे लिखें जहां फॉर्म सबमिट 1 0f 5 फ़ील्ड से मेल खा सकता है

मैं व्यक्तिगत रूप से MySQL क्वेरी स्ट्रिंग्स करने में बहुत अच्छा नहीं हूं, मैं आमतौर पर इसके समान एक sql कंपाइलर क्लास का उपयोग करता हूं (ध्यान रखें, यह सिर्फ एक त्वरित है)। यह बाइंडिंग की अनुमति देता है, जिसकी आपको आवश्यकता होती है, विशेष रूप से $_GET . के साथ आपके जैसे मान:

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);

आपको देता है:

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
    )

ध्यान दें, इसके लिए आपको उचित कनेक्शन का उपयोग करना होगा (इस मामले में पीडीओ सबसे अच्छा काम करता है)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस संसाधनों का उचित प्रबंधन:कर्सर और कनेक्शन

  2. मैं कनेक्टर/सी++ का उपयोग करके MySQL में एक पंक्ति में एक मान कैसे अपडेट करूं?

  3. MySQL पर Django में कॉलम के लिए डेटा बहुत लंबा है

  4. कैसे mysql समारोह में अक्षरांकीय पाठ से अग्रणी शून्य ट्रिम करने के लिए?

  5. MySQL में एकाधिक कॉलम कैसे खोजें?