ฟังก์ชันนี้สร้างขึ้น เพื่ออำนวยความสะดวก สำหรับคนที่ต้อง
เขียนโปรแกรม เชิ่อมต่อกับฐานข้อมูลบ่อยๆ
เริ่มต้นให้เราสร้างไฟล์ func_gensql.php และกำหนดโค้ดต่อไปนี้
ไฟล์ func_gensql.php
<?php function gen_sql($table,$where="",$type,$act_update=true,$act_insert=true,$act_delete=true){ global $mysqli; $result = $mysqli->query("SHOW COLUMNS FROM $table"); if(!$result){ echo 'Could not run query: ' . $mysqli->error; exit; } $g_type=$type; $g_type2=$type; $g_type3=$type; $arr_table_field=array(); $arr_table_type=array(); if($result->num_rows>0) { while ($row = $result->fetch_assoc()) { if(count($row)>0){ foreach($row as $k_field=>$v_field){ if($k_field=="Field"){ $arr_table_field[]=$v_field; } if($k_field=="Type"){ $arr_table_type[]=$v_field; } } } } if($act_update){ $str_update="<pre>UPDATE $table SET "."<br>"; $num_field=count($arr_table_field); $i_field=0; if($num_field>0){ foreach($arr_table_field as $k_field=>$v_field){ $i_field++; if(preg_match('/(int|tinyint|smallint|mediumint|bigint|float|double|decimal)/', $arr_table_type[$k_field], $matches, PREG_OFFSET_CAPTURE)){ $type="trim($".$g_type.")"; }else if(preg_match('/(char|varchar|longvarchar|tinytext|text|mediumtext|longtext)/', $arr_table_type[$k_field], $matches, PREG_OFFSET_CAPTURE)){ $type="addslashes($".$g_type.")"; }else if(preg_match('/^date/', $arr_table_type[$k_field], $matches, PREG_OFFSET_CAPTURE)){ $type="date('Y-m-d')"; }else if(preg_match('/^time/', $arr_table_type[$k_field], $matches, PREG_OFFSET_CAPTURE)){ $type="date('H:i:s')"; }else if(preg_match('/^datetime/', $arr_table_type[$k_field], $matches, PREG_OFFSET_CAPTURE)){ $type="date('Y-m-d H:i:s')"; }else{ $type="$$g_type"; } if($i_field==$num_field){ $str_update.=" ".$v_field."='".$type."'"."<br>"; }else{ $str_update.=" ".$v_field."='".$type."',"."<br>"; } } $str_update.="WHERE $where='".$$g_type."'"."<br></pre>"; } echo $str_update; } if($act_insert){ echo "<br><br><pre>"; $str_insert="INSERT INTO $table (<br>"; $num_field=count($arr_table_field); $i_field=0; if($num_field>0){ $str_insert_field=""; $str_insert_value=""; foreach($arr_table_field as $k_field=>$v_field){ $i_field++; if(preg_match('/(int|tinyint|smallint|mediumint|bigint|float|double|decimal)/', $arr_table_type[$k_field], $matches, PREG_OFFSET_CAPTURE)){ $type="trim($".$g_type2.")"; }else if(preg_match('/(char|varchar|longvarchar|tinytext|text|mediumtext|longtext)/', $arr_table_type[$k_field], $matches, PREG_OFFSET_CAPTURE)){ $type="addslashes($".$g_type2.")"; }else if(preg_match('/^date/', $arr_table_type[$k_field], $matches, PREG_OFFSET_CAPTURE)){ $type="date('Y-m-d')"; }else if(preg_match('/^time/', $arr_table_type[$k_field], $matches, PREG_OFFSET_CAPTURE)){ $type="date('H:i:s')"; }else if(preg_match('/^datetime/', $arr_table_type[$k_field], $matches, PREG_OFFSET_CAPTURE)){ $type="date('Y-m-d H:i:s')"; }else{ $type="$$g_type2"; } if($i_field==$num_field){ $str_insert_field.=" ".$v_field."<br>"; $str_insert_value.=" '".$type."'"."<br>"; }else{ $str_insert_field.=" ".$v_field.",<br>"; $str_insert_value.=" '".$type."',"."<br>"; } } $str_insert.=$str_insert_field; $str_insert.=") VALUES (<br>"; $str_insert.=$str_insert_value; $str_insert.=")<br></pre>"; } echo $str_insert; } if($act_delete){ echo "<br><br><pre>"; $str_delete="DELETE FROM $table WHERE $where='".$$g_type3."'"."<br></pre>"; echo $str_delete; } } }
จากนั้นเรียกใช้ผ่านการ include เข้ามา ในที่นี้ เราจะใช้กับ mysqli
ไฟล์ demo.php
<?php // โค้ดไฟล์ dbconnect.php ดูได้ที่ http://niik.in/que_2398_5642 require_once("dbconnect.php"); include_once("func_gensql.php"); ?>
ตัวอย่างตาราง ประกอบคำอธิบาย
CREATE TABLE `test_salary` ( `t_id` int(11) NOT NULL auto_increment, `t_name` varchar(10) NOT NULL, `t_position` int(11) NOT NULL, `t_salary` int(11) NOT NULL, PRIMARY KEY (`t_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
การใช้งาน
ฟังก์ชั่นข้างต้น จะทำการสร้างรูปแบบคำสั่ง sql ซึ่งประกอบไปด้วย
UPDATE INSERT และ DELETE ตัวอย่างผลลัพธ์ที่ได้
<?php // โค้ดไฟล์ dbconnect.php ดูได้ที่ http://niik.in/que_2398_5642 require_once("dbconnect.php"); include_once("func_gensql.php"); /* gen_sql("ชื่อตาราง", "ฟิลด์หลัก ที่ต้องการ เช่น primary key", "ค่าตัวแปรที่ต้องการ เบื้องต้น_POST['ddd'] ", "แสดง UPDATE ค่า true / null ค่าเริ่มต้น true ", "แสดง INSERT ค่า true / null ค่าเริ่มต้น true ", "แสดง DELETE ค่า true / null ค่าเริ่มต้น true "); */ gen_sql("test_salary","t_id","_POST['ddd']"); // หรือ gen_sql("test_salary","t_id","_POST['ddd']",true,true,true); ?>
ชุดคำสั่ง sql ผลลัพธ์ที่แสดง
UPDATE test_salary SET t_id='".trim($_POST['dddd'])."', t_name='".addslashes($_POST['dddd'])."', t_position='".trim($_POST['dddd'])."', t_salary='".trim($_POST['dddd'])."' WHERE t_id='".$_POST['dddd']."' INSERT INTO test_salary ( t_id, t_name, t_position, t_salary ) VALUES ( '".trim($_POST['dddd'])."', '".addslashes($_POST['dddd'])."', '".trim($_POST['dddd'])."', '".trim($_POST['dddd'])."' ) DELETE FROM test_salary WHERE t_id='".$_POST['dddd']."'
ตัวอย่างการเรียกใช้
// gen_sql("test_salary","t_id","_GET['ddd']",true,null,true);
ชุดคำสั่ง sql ผลลัพธ์ที่แสดง
UPDATE test_salary SET t_id='".trim($_GET['dddd'])."', t_name='".addslashes($_GET['dddd'])."', t_position='".trim($_GET['dddd'])."', t_salary='".trim($_GET['dddd'])."' WHERE t_id='".$_GET['dddd']."' DELETE FROM test_salary WHERE t_id='".$_GET['dddd']."'