2015-11-08 4 views
0

Quelqu'un peut-il m'aider avec la requête mysql? J'essaie d'insérer plusieurs lignes en utilisant une instruction select insert.Impossible d'insérer une instruction Select avec l'instruction préparée par php mysql

if ($insert_stmt = $mysqli->prepare("INSERT INTO order_processing_info (order_id, cart_item_id, item_id, price, quantity) VALUES (?, (SELECT s.cart_item_id, i.item_id, i.price, s.quantity FROM inventory_info AS i, cart_info AS s WHERE i.item_id=s.item_id AND s.user_id = ?))")) { 
        $insert_stmt->bind_param('ss', $order_id, $user_id); 

Je pense que le problème est parce que je veux même order_id pour tous les insérer ici, même si je ne suis pas sûr.

Auparavant, j'ai essayé de l'exécuter sans succès dans un bloc d'instructions select.

if ($select_stmt = $mysqli->prepare("SELECT i.item_id, i.price, s.quantity, s.cart_item_id FROM inventory_info AS i, shopping_cart_info AS s WHERE i.item_id=s.item_id AND s.user_id = ?")) { 
     $select_stmt->bind_param("s", $user_id); 
     $select_stmt->execute(); 
     $select_stmt->bind_result($item_id, $price, $quantity, $cart_item_id); 

     while ($select_stmt->fetch()) { 

      if ($insert_stmt = $mysqli->prepare("INSERT INTO order_processing_info (order_id, cart_item_id, item_id, price, quantity) VALUES (?, ?, ?, ?, ?)")) { 
       $insert_stmt->bind_param('sssss', $order_id, $cart_item_id, $item_id, $price, $quantity); 
       // Execute the prepared query. 
       if (!$insert_stmt->execute()) { 
        header('Location: ../error.php?err=INSERT failure: INSERT'); 
        exit(); 
       } 
      } 
     } 
     $select_stmt->close(); 
    } 

je l'ai regardé vers le haut beaucoup sur stackoverflow, mais je suppose que je ne suis pas compétent dans les requêtes de base de données, donc j'apprécierait si quelqu'un peut me aider. Utilisez une requête "INSERT INTO SELECT" (http://www.w3schools.com/sql/sql_insert_into_select.asp), un seul paramètre doit alors être lié, l'ID utilisateur.

Répondre

0

Cela permettra également d'économiser sur le temps de la requête dans la boucle

+0

Merci j'ai été en mesure de le mettre en place en mettant l'instruction d'insertion dans une boucle de résultats d'instruction select. Merci pour l'aide! –