สอบถามเกี่ยวกับการ insert แบบวนลูป เมื่อเจอเครื่องหมายหรือสัญลักษณ์
แบบง่ายที่สุดคือใช้ explode() ครับ
Code (PHP)
$data = 'aaa | bbb | ccc | eee | ddd | ppp |';
$data = explode('|', $data); // ทำให้ $data เป็น array โดยใช้ | เป็นตัวแบ่ง
จากข้อมูลข้างบนจะได้ array ที่มีสมาชิก
'aaa '
' bbb '
' ccc '
' eee '
' ddd '
' ppp '
และ
''
สังเกตว่าจะมีช่องว่างติดมาด้วย หากคุณไม่ต้องการเอาช่องว่าง คุณต้องวนลูปเพื่อ trim() สมาชิกทุกตัว
Code (PHP)
foreach ($data as $value) {
$value = trim($value);
}
แต่ก็จะมีตัวสุดท้ายที่เป็นข้อมูลว่าง '' เราสามารถเอามันออกได้ด้วย array_filter()
Code (PHP)
$data = array_filter($data);
แต่ array_filter() จะเอาสตริง '0' ออกไปด้วย หากมีค่า '0' อยู่ใน array ค่า '0' จะไม่ถูกบันทึก
ดังนั้นเราควรเช็คให้แน่ชัดว่ามันเป็นสตริงว่างจริงหรือไม่
และในการ INSERT เราสามารถ INSERT หลายๆ แถวพร้อมกันใน query เดียวด้วย syntax
Code (SQL)
INSERT INTO `table` VALUES (row1),(row2),(row3),(row4),...
ดังนั้นเราจึงควรสร้าง query ไว้ก่อนที่จะ INSERT
โค้ดทั้งหมดก็จะประมาณนี้
Code (PHP)
$data = 'aaa | bbb | ccc | eee | ddd | ppp |';
$data = explode('|', $data); // ทำให้ $data เป็น array โดยใช้ | เป็นตัวแบ่ง
$values = array();
foreach ($data as $value) {
$value = trim($value);
// หากเอาช่องว่างออกแล้วเป็นสตริงว่าง ให้ข้ามไปเลย
if ($value === '') {
continue;
}
// สร้าง SQL ของ VALUES เช่น หากค่าเป็น 555 จะได้ SQL ('555')
// และเพิ่มเข้าไปเป็นสมาชิกของ array $values
$values[] = "('" . mysql_real_escape_string($value) . "')";
}
// หากมีค่าที่จะ INSERT จริงๆ (ไม่ใช่ array ว่างเปล่า) ก็ให้ทำการ INSERT
if (!empty($values)) {
$values = implode(',', $values); // รวม SQL ทุกแถวเข้าด้วยกันด้วย ,
mysql_query("INSERT INTO `table` VALUES $values");
}
ประวัติการแก้ไข 2013-08-25 19:21:01
Date :
2013-08-25 19:19:47
By :
phpinfo()
ขอบคุณมาก ๆ ครับ
ผมขอลองดูก่อน
Date :
2013-08-25 19:23:13
By :
lengza
Load balance : Server 01