|
PHP สร้างคำสั่ง SQL INSERT ให้มีระเบียบสวยงามด้วยฟังก์ชั่น implode() |
PHP สร้างคำสั่ง SQL INSERT ให้มีระเบียบสวยงามด้วยฟังก์ชั่น implode() หลังจากที่ได้ลองใช้ฟังก์่ชั่น implode() ช่วยในการสร้างตาราง html และช่วยลดลูปในการต่อสตริงเพื่อใช้งานกับคำสั่ง SQL ในการค้นหาข้อมูลไปแล้ว คราวนี้มาลองสร้างคำสั่ง INSERT กันดูบ้างนะครับ
พอเห็นหัวข้อปุ๊บ หลายคนคงจะคิดขึ้นมาทันทีว่า แค่คำสั่ง INSERT จะทำให้มันยุ่งยากไปทำไม??
เป็นความชอบส่วนบุคคลครับ ^^ พอได้แก้โค๊ดบ่อยๆ ก็ตาลายหาฟิลด์ไหน ค่าไหน อยู่ตรงไหนจนวุ่นวาย
เลยทำการแยกข้อมูลมาอยู่ในรูปแบบอาร์เรย์ เวลาแก้จะได้เข้าใจได้ทันทีว่า ด้านซ้ายเป็นชื่อฟิลด์ ด้านขวาคือข้อมูลที่ส่งมาจากฟอร์ม เวลาแก้ก็ไม่ต้องนับว่าอยู่ในตำแหน่งที่เท่าไหร่ ถัดจากตัวไหนให้วุ่นวาย ^__^
ตัวอย่างนี้จะใช้ implod() สองครั้ง
ครั้งแรก ใช้เชื่อมชื่อฟิลด์ต่างๆ ที่ถูกแยกชื่อฟิลด์ออกมาด้วย array_keys()
ครั้งที่สอง ใช้เชื่อมค่าต่างๆ ที่ถูกแยกออกมาด้วย array_values()
จากนั้นก็นำตัวแปรที่ได้ทั้ง 2 ตัวไปวางในตำแหน่งของคำสั่ง SQL ที่เตรียมไว้
ตัวอย่างแบบฟอร์มการส่งค่า-รับค่า
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
<table border="0">
<tr>
<td align="right">payment_id</td>
<td><input name="payment_id" value="AAAAAA"></td>
</tr>
<tr>
<td align="right">payment_customer_id</td>
<td><input name="payment_customer_id" value="BBBBBBB"></td>
</tr>
<tr>
<td align="right">payment_date</td>
<td><input name="payment_date" value="CCCCCCC"></td>
</tr>
<tr>
<td align="right">payment_amount</td>
<td><input name="payment_amount" value="DDDDDDD"></td>
</tr>
<tr>
<td align="right"></td>
<td><input type="submit" name="send" value="Save"></td>
</tr>
</table>
</form>
<?php
if(isset($_POST['send'])){
$data = array(
'payment_id' => $_POST['payment_id'],
'payment_customer_id' => $_POST['payment_customer_id'],
'payment_date' => $_POST['payment_date'],
'payment_amount' => $_POST['payment_amount'],
);
$field_name = implode(", ", array_keys($data));
$field_value = implode("', '", array_values($data));
$sql = "INSERT INTO myTable ($field_name) VALUES ('$field_value')";
echo $sql;
}
?>
ผลลัพธ์ที่ได้
INSERT INTO myTable (payment_id, payment_customer_id, payment_date, payment_amount) VALUES ('AAAAAA', 'BBBBBBB', 'CCCCCCC', 'DDDDDDD')
สำหรับตัวแปร $data นั้นถ้าในแบบฟอร์มเรากำหนดให้ช่องกรอกข้อมูลมีชื่อเดียวกันกับฟิลด์ในฐานข้อมูลแล้ว จะง่ายต่อการเขียนโค๊ดอย่างมากครับท่านสามารถสร้างเครื่องมือสำหรับสร้างตัวแปรไว้ใช้เองได้ โดยดูตัวอย่างและโหลดซอร์สโค๊ดได้จาก
http://phpclass.pusku.com/devtool/?page=create_insert_sql (ผลลัพธ์ที่ได้จะมีทั้งแบบ INSERT ธรรมดา และแบบสร้างอาร์เรย์ เพื่อใช้กับฟังก์ชั่น inplode ที่ยกตัวอย่างให้ดูในบทความนี้ได้ด้วย)
ทิ้งท้ายอีกนิดนึงครับ สำหรับโค๊ดส่วนนี้
$field_name = implode(", ", array_keys($data));
$field_value = implode("', '", array_values($data));
$sql = "INSERT INTO myTable ($field_name) VALUES ('$field_value')";
ถ้าสร้างเป็นฟังก์ชั่นเก็บไว้ใช้หลายๆ ครั้งก็จะได้ไม่ต้องมาเขียนใหม่ซ้ำๆ หลายครั้ง
Code (PHP)
function sqlInsert($tablename, $arr){
$field_name = implode(", ", array_keys($arr));
$field_value = implode("', '", array_values($arr));
return "INSERT INTO $tablename($field_name) VALUES ('$field_value')";
}
$data = array(
'payment_id' => $_POST['payment_id'],
'payment_customer_id' => $_POST['payment_customer_id'],
'payment_date' => $_POST['payment_date'],
'payment_amount' => $_POST['payment_amount'],
);
$sql = sqlInsert("tb_payment", $data);
ถ้าใครเห็นดีเห็นงาม ก็ลองนำไปใช้ดูนะครับ จะทำให้โค๊ด INSERT หลายๆฟิลด์อ่านง่ายขึ้นมากทีเดียว ^O^
Reference : http://sunzandesign.blogspot.com
|