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

एक सुरक्षित चयन क्वेरी कैसे लिखें जिसमें mysqli के साथ उपयोगकर्ता द्वारा आपूर्ति किए गए मानों की एक चर संख्या हो?

आपको जो कार्य करना है वह प्लेसहोल्डर्स की एक चर संख्या के साथ एक तैयार कथन है। यह पीडीओ में आसान है, लेकिन मैं आपको mysqli ऑब्जेक्ट-ओरिएंटेड स्टाइल अप्रोच दिखाऊंगा। कोई बात नहीं, हमेशा एक जेसन एन्कोडेड सरणी प्रिंट करें ताकि आपकी प्राप्त करने वाली स्क्रिप्ट को पता चले कि किस प्रकार का डेटा प्रकार अपेक्षित है।

मेरे पास एक स्निपेट बिछा हुआ था जिसमें डायग्नोस्टिक्स और त्रुटि जाँच की पूरी बैटरी शामिल है। मैंने इस स्क्रिप्ट का परीक्षण नहीं किया है, लेकिन इसमें मेरी इस पोस्ट से काफी समानता है। ।

if (empty($_POST['companyname']) || empty($_POST['username'])) {  // perform any validations here before doing any other processing
    exit(json_encode([]));
}

$config = ['localhost', 'root', '', 'dbname'];  // your connection credentials or use an include file
$values = array_merge([$_POST['companyname']], explode(',', $_POST['username']));  // create 1-dim array of dynamic length
$count = sizeof($values);
$placeholders = implode(',', array_fill(0, $count - 1, '?'));  // -1 because companyname placeholder is manually written into query
$param_types = str_repeat('s', $count);
if (!$conn = new mysqli(...$config)) {
    exit(json_encode("MySQL Connection Error: <b>Check config values</b>"));  // $conn->connect_error
}
if (!$stmt = $conn->prepare("SELECT user_scid, user_scid FROM linked_user WHERE company_name = ? AND username IN ({$placeholders})")) {
    exit(json_encode("MySQL Query Syntax Error: <b>Failed to prepare query</b>"));  // $conn->error
}
if (!$stmt->bind_param($param_types, ...$values)) {
    exit(json_encode("MySQL Query Syntax Error: <b>Failed to bind placeholders and data</b>"));  // $stmt->error;
}
if (!$stmt->execute()) {
    exit(json_encode("MySQL Query Syntax Error: <b>Execution of prepared statement failed.</b>"));  // $stmt->error;
}
if (!$result = $stmt->get_result()) {
    exit(json_encode("MySQL Query Syntax Error: <b>Get Result failed.</b>")); // $stmt->error;
}
exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));

यदि आप उन सभी नैदानिक ​​स्थितियों और टिप्पणियों की सूजन नहीं चाहते हैं, तो यहां नंगे हड्डियों के बराबर है जो समान रूप से प्रदर्शन करना चाहिए:

if (empty($_POST['companyname']) || empty($_POST['username'])) {
    exit(json_encode([]));
}

$values = explode(',', $_POST['username']);
$values[] = $_POST['companyname'];
$count = count($values);
$placeholders = implode(',', array_fill(0, $count - 1, '?'));
$param_types = str_repeat('s', $count);

$conn = new mysqli('localhost', 'root', '', 'dbname');
$stmt = $conn->prepare("SELECT user_scid, user_scid FROM linked_user WHERE username IN ({$placeholders}) AND company_name = ?");
$stmt->bind_param($param_types, ...$values);
$stmt->execute();
$result = $stmt->get_result();
exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));


  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 स्कीमा को Github Wiki में बदलें?

  2. कैसे रिकॉर्ड प्राप्त करने के लिए अगर Laravel . में गिनती शून्य है

  3. सी # MySqlParameter समस्या

  4. MySQL में AUTO_INCREMENT को रीसेट करने में लंबा समय लग रहा है

  5. मैं इस जटिल SQL को Django मॉडल क्वेरी में कैसे परिवर्तित करूं?