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

पीडीओ पीएचपी बाइंडवैल्यू काम नहीं करता

समस्या यहाँ है:

$sql = $sql . 'WHERE a.regGUID in ( :regGUID ) and ';
$stmt->bindValue(':regGUID', $regGUID, PDO::PARAM_STR);

मुझे लगता है कि $regGUID उद्धृत स्ट्रिंग्स की अल्पविराम से अलग की गई सूची है।

प्रत्येक क्वेरी पैरामीटर केवल एक अदिश मान को स्वीकार करता है। नहीं सूचियां मूल्यों का।

तो आपके पास दो विकल्प हैं:

  1. $regGUID स्ट्रिंग को इंटरपोलेट करना जारी रखें, भले ही आप अन्य स्केलर मानों के लिए पैरामीटर का उपयोग करें। लेकिन आप अभी भी SQL इंजेक्शन से बचने के लिए सावधान रहना चाहते हैं, इसलिए आपको $regGUID स्ट्रिंग को सही ढंग से बनाना होगा। आप पूरी स्ट्रिंग पर केवल PDO::quote() को कॉल नहीं कर सकते हैं, जो इसे UUIDs और अल्पविराम वाली एकल उद्धृत स्ट्रिंग बना देगा। आपको यह सुनिश्चित करना होगा कि प्रत्येक यूयूआईडी स्ट्रिंग बच निकली है और अलग-अलग उद्धृत की गई है, फिर सूची को एक साथ इंपोड करें और इसे आईएन क्लॉज में इंटरपोलेट करें।

    $regGUIDs = explode(',', $regGUID);
    $regGUIDs = array_map(function ($g) { return $db->quote($g); }, $regGUIDs);
    $regGUID = implode(',', $regGUIDs);
    $sql = $sql . 'WHERE a.regGUID in (' . $regGUID . ') and ';
    
  2. explode() एक सरणी में $regGUID, और सरणी में प्रत्येक तत्व के लिए एक क्वेरी पैरामीटर जोड़ें। क्वेरी पैरामीटर प्लेसहोल्डर्स की गतिशील सूची को इंटरपोलेट करें।

    $regGUIDs = explode(',', $regGUID);
    $params = array_fill(1, count($regGUIDs), '?');
    $sql = $sql . ' WHERE a.regGUID in ( ' . implode(',', $params) . ' ) and ';
    

आप सरणी के लिए लूप में बाइंडवैल्यू() कर सकते हैं, लेकिन ध्यान रखें कि अन्य पैरामीटर भी स्थिति से बंधे होने चाहिए, नाम से नहीं। जब आप एक ही क्वेरी में पैरामीटर की दो अलग-अलग शैलियों को मिलाने का प्रयास करते हैं, तो PDO में बग होते हैं जो इसे खुश नहीं करते हैं।

बाइंडवैल्यू() का उपयोग करने के बजाय मैं पैरामीटर मानों की एक सरणी को PDOStatement::execute() में पास करता हूं, जो बहुत आसान है।

$paramValues = $regGUIDs;
$paramValues[] = $game;
$results = $stmt->execute($paramValues);


  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 का उपयोग करके स्ट्रिंग्स को विभाजित करें

  2. auto_increment का उपयोग कर PHP लघु अद्वितीय आईडी पीढ़ी?

  3. php- अंतिम सम्मिलित आईडी प्राप्त करें

  4. किसी अन्य क्वेरी से थोड़ी देर में दूसरी पीडीओ MySQL क्वेरी कैसे करें?

  5. mysql तिथि में वर्ष बदल रहा है