  | 
              
	              
	                
  
    
	 
        สอบถามปัญหาคำสั่ง sql เกี่ยวกับการ insert into values select ครับ พอดีว่าลองเทสใน Mysql แล้วมันบอกว่า Subquery returns more than 1 row     | 
   
  
    |   | 
   
 
 
 
	
		
			  | 
	   | 
	    | 
		
			  | 
	 
	
		
			  | 
		 		   | 
	  	    
          
            
			
	
			
			 
                เริ่มต้นด้วยคำสั่ง SQL ที่ผมเขียนเลยแล้วกันนะครับ 
 
Code (SQL) 
$sql = "insert into product_branch (pro_id,branch_id) values ((select pro_id from product),'".$_POST['branch_id']."')";
  
 
เมื่อ Query จากคำสั่งนี้ ปรากฏว่าไม่มีข้อมูลเข้า DB เลย 
เนื่องจาก Table product นั้นมีข้อมูลมากกว่า 1 ID แล้วผมต้องการให้ Query ครั้งเดียวทำการ Insert Product ทั้งหมดเข้า Table product_branch เลยซึ่ง Table product_branch นั้นเก็บค่าแค่ 3 col คือ id,pro_id,branch_id 
 
แน่นอนว่า คำสั่งนี้ผมได้ทดลองด้วยการใส่ where เข้าไปแล้วได้ผลเช่น  
 
Code (SQL) 
$sql = "insert into product_branch (pro_id,branch_id) values ((select pro_id from product where pro_id = 1),'".$_POST['branch_id']."')";
  
 
แต่นั่นไม่ใช่ความต้องการ เพราะ ข้อมูลที่ insert เข้ามาด้วยการใส่ where มีแค่ rows เดียว 
 
ปล. ผมใช้คำสั่ง ด้านล่างในการ query เนื่องจากใน query มี 3 คำสั่งรวมคำสั่งด้านบน ซึ่ง 2 คำสั่งแรกทำงานถูกต้องแม่นยำ 
 
Code (SQL) 
$result = $conn->multi_query($sql);
 
 
 
  Tag : PHP, MySQL, HTML, CSS, Apache, XAMPP               
                        | 
           
          
            | 
			
                             | 
           
          
            
              
                   | 
                   | 
                   | 
               
              
                   | 
                
                    
                      | Date :
                          2018-03-19 00:06:28 | 
                      By :
                          Pla2todkrob | 
                      View :
                          1519 | 
                      Reply :
                          4 | 
                     
                  | 
                   | 
               
              
                   | 
                   | 
                   | 
               
              | 
           
          
            | 
			 | 
           
         
	    
		             | 
		
			  | 
	 
	
		
			  | 
		  | 
		
			  | 
		
			  | 
	 
 
              
  
          
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 Code (PHP) 
$sql = 'insert into product_branch (pro_id,branch_id) select pro_id, ? from product ';
if($stmt=$con->prepare($sql)){
  $stmt->bind_param("i", filter_input( INPUT_POST, 'branch_id'));
  $stmt->execute();
}
                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-03-19 06:20:12 | 
                        By :
                            Chaidhanan | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                   ตอบความคิดเห็นที่ : 1 เขียนโดย : Chaidhanan เมื่อวันที่ 2018-03-19 06:20:12 
รายละเอียดของการตอบ ::
  Code (SQL)
if(isset($_POST['branch_id']))
	{
		$sql = "update branch set ad_id = '".$_POST['ad_id']."' , branch_md5id = '".md5($_POST['branch_id'])."' where branch_id = '".$_POST['branch_id']."';update administrator set branch_id = '".$_POST['branch_id']."' where id = '".$_POST['ad_id']."';insert into product_branch (pro_id,branch_id) select pro_id, ? from product";
		$result = $conn->multi_query($sql);
	}
	else
	{
		$sql = "insert into branch (branch_name,branch_contact,branch_address,qty_cooker) values ('".$_POST['branch_name']."','".$_POST['branch_contact']."','".$_POST['branch_address']."','".$_POST['qty_cooker']."')";
		$result = $conn->query($sql);
	}
	if($result)
	{
		header('Location: ../branch.php');
	} 
	else 
	{
	?>
	<script>
		window.history.back();
	</script>
	<?php
	}
	$conn->close();
 
 
ผมเพิ่ม Code บรรทัดแรกไปแบบนี้แล้ว เหลือตรงส่วน if นี้ผมควรไปรวมยังไงดีครับ 
 
Code (SQL) 
if($stmt=$con->prepare($sql)){
  $stmt->bind_param("i", filter_input( INPUT_POST, 'branch_id'));
  $stmt->execute();
}
                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-03-19 21:18:12 | 
                        By :
                            Pla2todkrob | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
               
		
     
		
	     
	    
     
               
		
     
		
	  
        
             | 
            | 
            | 
             | 
         
        
             | 
                       | 
          
            
               
                 prepare ไม่สามารถใช้ multi query ได้ครับ 
 
จากโค๊ดที่คุณทำ multi_query สามารถแยกคิวรี่ได้ครับ 
ก็ทำการคิวรี่ 2 ครั้ง 
 
การใช้ prepare ช่วยเรื่อง sql injection ได้อย่างดี                        
               
               | 
             
            
              
			                              
                              
              
                
                     | 
                     | 
                     | 
                 
                
                     | 
                  
                      
                        | Date :
                            2018-03-21 22:18:00 | 
                        By :
                            Chaidhanan | 
                         
                    | 
                     | 
                 
                
                     | 
                     | 
                     | 
                 
                | 
             
           
			         | 
             | 
         
        
             | 
            | 
             | 
             | 
         
          
	    
     
      		  
	
     | 
   
 
                 |