สอบถามปัญหาคำสั่ง 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 :
1411
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
Load balance : Server 02