 |
สอบถามปัญหาคำสั่ง 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 :
1438 |
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 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|