ผมหัดเขียน OOP insert ข้อมูลลงฐานข้อมูล ขอความเห็นหน่อยครับ
พยายามหัดเขียน OO อยู่ครับ ยังไม่เข้าใจเรื่อง ตัวแปรและ ฟังก์ชัน แบบ public private protected ครับ ช่วยดูทีว่าเขียนอย่างนี้ถูกหลักการหรือไม่ อย่างไร
จุดหมายของ code นี้คือ นำค่าที่ได้รับจาก แบบฟอร์ม เช่น ใน $_REQUEST มาดัดแปลงเพื่อความปลอดภัย แล้วนำไปสร้างคำสั่ง sql แล้ว ให้ รันคำสั่งนั้นครับ
Code (PHP)
<?php
//ใช้เชื่อมต่อกับฐานข้อมูล
class db_connect {
protected $con_st = array('localhost','root','****','dcdvd'); //ควรใช้ private หรือ protected เมื่อไม่ต้องการให้เปลี่ยน และไม่ให้ใครเห็น
public $link = ''; //ต้องการให้ฟังก์ชันอื่นเรียกใช้ได้ ใช้ public แล้ว จะถูกแก้ไขได้หรือไม่
protected function __construct() {
$con_st=$this->con_st ;
$link = mysql_connect($con_st[0],$con_st[1],$con_st[2]) ;
mysql_select_db($con_st[3],$link) ;
$this->link=$link ;
$this->con_st=$con_st ;
}
}
//ใช้ดัดแปลงข้อมูลที่ถูกส่งมา คือ ตัดช่องว่างหน้าหลังออก stripcslashes และ real_escape_string
class request_modify extends db_connect {
public $fld_nm =array();//เก็บชื่อฟิลด์ที่จะ insert เป็น array
public $fld_vl = array();//เก็บค่าที่จะinsert เป็นarray เรียงลำดับตรงกับ $this->fld_nm
public function __construct($fld_nm,$rq) {
parent::__construct();
for($i=0; $i<count($fld_nm); $i++) {
$rq[$fld_nm[$i]] = trim($rq[$fld_nm[$i]]);
$rq[$fld_nm[$i]] = stripcslashes($rq[$fld_nm[$i]]);
$rq[$fld_nm[$i]] = mysql_real_escape_string($rq[$fld_nm[$i]]);
$fld_vl[$i] = $rq[$fld_nm[$i]];
}
$this->fld_nm = $fld_nm ;//เก็บชื่อฟิลด์ที่จะ insert เป็น array
$this->fld_vl = $fld_vl ;//เก็บค่าที่จะinsert เป็นarray เรียงลำดับตรงกับ $this->fld_nm
}
}
//ใช้สร้างคำสั่ง sql
class insertsql extends request_modify {
public $insertsql = '' ;//คำสั่ง sql ที่จะสร้าง
public function __construct($fld_nm,$rq,$table_nm){
parent:: __construct($fld_nm,$rq);
$this->insertsql = 'insert into '.$table_nm.' ('.implode($this->fld_nm,',').') value ("'.implode($this->fld_vl,'","').'" )' ;
}
public function __toString() {
return $this->insertsql ;
}
}
//ใช้ รัน คำสั่ง sql
class insertexe extends insertsql {
public $exe = 0 ;//ผลการรันคำสั่ง
public $last_id = 0 ;//ค่า id ที่ insert ล่าสุด
public function __construct($fld_nm,$rq,$table_nm){
parent:: __construct($fld_nm,$rq,$table_nm);
$this->exe = mysql_query($this->insertsql , $this->link);
$this->last_id = mysql_insert_id($this->link);
}
public function __toString() {
return $this->last_id ;
}
}
// การใช้งาน
//รายชื่อฟิลด์ที่จะ insert
$fn = array('name','address','email') ;
//ตารางที่จะ insert
$table = 'member' ;
//ส้รางอินสแตนส์
$a = new insertexe($fn,$_REQUEST,$table) ;
//ถ้ารันคำสั่งสำเร็จ ให้แสดงค่า id ล่าสุด
if($a->exe){
echo $a->last_id ; //ตรงนี้ผมใช้คำสั่ง echo $a เพื่อเรียก magic method __toString() จะไม่ได้ผล ไมทราบเพราะอะไร
}
//ถ้ารันคำสั่งไม่ได้ ให้แสดง คำสั่งsql
else{
echo 'fail to run : '. $a->insertsql ;
}
//ขอบคุณครับ
?>
Tag : PHP, MySQL
ประวัติการแก้ไข 2010-09-23 09:23:19 2010-09-23 09:24:04 2010-09-23 09:26:36 2010-09-23 09:27:45 2010-09-23 09:28:24
Date :
2010-09-23 09:20:19
By :
สกล
View :
1664
Reply :
4
เอาแบบคร่าวๆ แล้วกันนะ
Public : สาธารณะ ใครก็ใช้ตัวแปรตัวนี้ได้
Private : ส่วนตัว ใช้ไดแค่ในช่วงนั้นๆ หรือภายใต้ปีกกาที่ตัวมันถูกประกาศอยู่ คนอื่นไม่เห็น (กรณีสืบทอดคลาสไปก็จะมองไม่เห็น)
Code (C#)
Class MyClass
{
int B=0; //ตัวแปร B จะใช้ได้ตลอด class procedure หรือ function ที่อยุ่ใน class นี้ใช้ได้หมด
public MyClass()
{
int A=0; //ตัวแปร A จะใช้ได้แค่ตรงนี้ ภายในปีกกาของ MyClass function
A=1;
B=55;
}
public int NumAdd(int n1, int n2)
{
B=n1+n2;
return B;
}
}
Protected : ส่วนตัวแต่อ้างถึงได้ ก็ตามนี้เลยครับ จะเหมือน public+private เช่น
Code (C#)
Class MyClass
{
int B=0; //ตัวแปร B จะใช้ได้ตลอด class procedure หรือ function ที่อยุ่ใน class นี้ใช้ได้หมด
protected string MyApp = "Demonstrate protected variable";
public MyClass()
{
int A=0; //ตัวแปร A จะใช้ได้แค่ตรงนี้ ภายในปีกกาของ MyClass function
A=1;
B=55;
}
public int PlusNum(int n1, int n2)
{
B=n1+n2;
return B;
}
}
Class ClassTest :: MyClass //สืบทอดมาจาก class ข้างบน
{
public ClassTest()
{
printf(this.MyApp); //จะสามารถอ้างถึงตัวแปร MyApp ของ class แม่ได้แต่ไม่สามารถเปลี่ยนแปลงได้
string strTmp = "Call by child class ::" & this.MyApp;
printf(strtmp);
}
public int DevideNum(int n1, int n2)
{
B=n1/n2;
return B;
}
}
อันนี้แนะนำ
protected $con_st = array('localhost','root','****','dcdvd'); //ควรใช้ private หรือ
เรื่องการใช้ user/password สำหรับ connect database อยากให้สร้าง user ขึ้นมาใหม่แล้วให้สิทธ์ user นั้นใช้งานได้เฉพาะ database นั้นๆ ดีกว่าครับ ถ้าใช้ root เนี่ย แล้วบอกว่าไ่ม่อยากให้ใครเห็นอ่ะ ถ้ามีคนเห็นขึ้นมาก็สามารถทำได้หมดเลยใน database เรานะ แต่ถ้าเป็น user อื่นก็จะได้สบายใจว่าเค้าก็ทำอะไรกับ table อื่น database อื่นที่อยู่ในเครื่อง ก็จะปลอดภัยครับ
Date :
2010-09-23 10:52:25
By :
salapao_codeman
ขอบคุณครับ
Date :
2010-09-23 17:29:09
By :
สกล
Load balance : Server 04