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

PHP - IN क्लॉज सरणी के साथ PDO का उपयोग करना

पीडीओ ऐसी चीजों से अच्छा नहीं है। आपको प्लेसहोल्डर्स के साथ गतिशील रूप से एक स्ट्रिंग बनाने और क्वेरी में डालने की आवश्यकता है, जबकि बाध्यकारी सरणी सामान्य तरीके से मानती है। स्थितीय प्लेसहोल्डर्स के साथ यह इस प्रकार होगा:

$in  = str_repeat('?,', count($in_array) - 1) . '?';
$sql = "SELECT * FROM my_table WHERE my_value IN ($in)";
$stm = $db->prepare($sql);
$stm->execute($in_array);
$data = $stm->fetchAll();

यदि क्वेरी में अन्य प्लेसहोल्डर हैं, तो आप निम्नलिखित दृष्टिकोण का उपयोग कर सकते हैं (कोड मेरे PDO ट्यूटोरियल से लिया गया है। ):

आप array_merge() का उपयोग कर सकते हैं सभी चरों को एक सरणी में जोड़ने के लिए कार्य करता है, आपके अन्य चर को सरणी के रूप में जोड़ते हुए, जिस क्रम में वे आपकी क्वेरी में दिखाई देते हैं:

$arr = [1,2,3];
$in  = str_repeat('?,', count($arr) - 1) . '?';
$sql = "SELECT * FROM table WHERE foo=? AND column IN ($in) AND bar=? AND baz=?";
$stm = $db->prepare($sql);
$params = array_merge([$foo], $arr, [$bar, $baz]);
$stm->execute($params);
$data = $stm->fetchAll();

यदि आप नामित प्लेसहोल्डर्स का उपयोग कर रहे हैं, तो कोड थोड़ा अधिक जटिल होगा, क्योंकि आपको नामित प्लेसहोल्डर्स का एक क्रम बनाना होगा, उदा। :id0,:id1,:id2 . तो कोड होगा:

// other parameters that are going into query
$params = ["foo" => "foo", "bar" => "bar"];

$ids = [1,2,3];
$in = "";
$i = 0; // we are using an external counter 
        // because the actual array keys could be dangerous
foreach ($ids as $item)
{
    $key = ":id".$i++;
    $in .= ($in ? "," : "") . $key; // :id0,:id1,:id2
    $in_params[$key] = $item; // collecting values into a key-value array
}

$sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar";
$stm = $db->prepare($sql);
$stm->execute(array_merge($params,$in_params)); // just merge two arrays
$data = $stm->fetchAll();

सौभाग्य से, नामित प्लेसहोल्डर्स के लिए हमें सख्त आदेश का पालन करने की आवश्यकता नहीं है, इसलिए हम अपने सरणियों को किसी भी क्रम में मर्ज कर सकते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उपयोगकर्ता इनपुट पर निर्भर लंबी क्वेरी के लिए मैं PHP में MySQL त्रुटि कैसे प्रदर्शित करूं?

  2. MySQLdb का उपयोग करके कर्सर को कब बंद करें

  3. अपने MySQL डेटाबेस का बैकअप लें

  4. SQL सर्वर के लिए MySQL LIMIT क्लॉज समतुल्य

  5. MySQL त्रुटि 1290 (HY000) --सुरक्षित-फ़ाइल-निजी विकल्प