मैं एक ट्यूटोरियल का अनुसरण कर रहा हूं जो पीडीओ का उपयोग करता है और मुझे MySQLi का उपयोग करना चाहिए। ट्यूटोरियल में, यह पंक्ति है:

$stmt->execute(array_keys($products_in_cart));

और मेरी सबसे अच्छी कोशिश ऐसा करना है:

$stmt->bind_param('i', array_keys($products_in_cart));
$stmt->execute();

यह काम करता है, लेकिन केवल एक उत्पाद के साथ, यानी जब सरणी में केवल एक तत्व होता है ([0] => 1)।

यहाँ पूरा हिस्सा है:

// Check the session variable for products in cart
$products_in_cart = isset($_SESSION['cart']) ? $_SESSION['cart'] : array();
$products = array();
$subtotal = 0.00;

// If there are products in cart
if ($products_in_cart) {
    // There are products in the cart so we need to select those products from the database
    // Products in cart array to question mark string array, we need the SQL statement to include IN (?,?,?,...etc)
    $array_to_question_marks = implode(',', array_fill(0, count($products_in_cart), '?'));
    $stmt = $mysqli->prepare('SELECT * FROM products WHERE id IN (' . $array_to_question_marks . ')');
    // We only need the array keys, not the values, the keys are the id's of the products
    $stmt->bind_param('i', array_keys($products_in_cart));
    $stmt->execute();
    // Fetch the products from the database and return the result as an Array
    $products = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    // Calculate the subtotal
    foreach ($products as $product) {
        $subtotal += (float) $product['price'] * (int) $products_in_cart[$product['id']];
    }
}

मेरा मानना ​​​​है कि कई उत्पाद होने पर IN() क्लॉज के लिए SQL स्टेटमेंट गड़बड़ हो जाता है, यानी $array_to_question_marks सही नहीं होता है।

1
Martin Augustsson 7 अप्रैल 2020, 12:53

1 उत्तर

सबसे बढ़िया उत्तर

MySQLi पीडीओ की तुलना में अधिक कठिन है। मैं जब भी संभव हो पीडीओ का उपयोग करने की दृढ़ता से अनुशंसा करता हूं।

यदि आप mysqli में अज्ञात संख्या के मापदंडों को बांधना चाहते हैं, तो आपको प्रकारों के साथ स्ट्रिंग बनाने और फिर सरणी को विभाजित करने की आवश्यकता है।

$arrayKeys = array_keys($products_in_cart);
$stmt->bind_param(str_repeat("s", count($arrayKeys)), ...$arrayKeys);
$stmt->execute();
3
Dharman 7 अप्रैल 2020, 10:03