Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > สอบถามเรื่อง oop ของ Mysql Connection มันไม่ clear ค่าเมื่อเรียก function ซ้ำกัน



 

สอบถามเรื่อง oop ของ Mysql Connection มันไม่ clear ค่าเมื่อเรียก function ซ้ำกัน

 



Topic : 095793



โพสกระทู้ ( 51 )
บทความ ( 0 )



สถานะออฟไลน์




เพิ่งหัดเขียน oop ครับ เริ่มกับการ Mysql connection ก่อน ตาม Code ด้านล่างครับ

Code (PHP)
<?
class DBTools{
	/*
	select and where condition
	$this->DBCharSet="UTF8";
	$this->SelectTable="database";
	$this->SelectField="field1 field2"; // for display column field
	$this->WhereData="field1='test' and field2 like '%like%' ";
	
	define navigator
	$this->ShowNav=1; 0=disable
	$this->line_per_page=20;
	$this->page_space=3;
	$this->get_page=$_GET['page'];
	$this->NavParam="param1=1&param2=2";

	show data
	$this->ShowData=1;
	$this->ShowQuery=1; show query syntax
	$this->ShowTableData();
	*/
	
	function __construct(){
	
	unset($SelectTable);
	unset($WhereData);
	unset($ShowQuery);
	unset($DataOrder);
	unset($SelectField);
	unset($line_per_page);
	unset($page_space);
	unset($NavParam);
	unset($get_page);

	
	}

	function ConnDatabase($MyHost,$MyDB,$MyUsername,$MyPassword){
		$this->GoConn=mysql_connect($MyHost,$MyUsername,$MyPassword);
		$this->GoDB=mysql_select_db($MyDB);
		mysql_query("SET character_set_results=".$this->DBCharSet);
		mysql_query("SET NAMES ".$this->DBCharSet);
	}

	function ShowTableData(){
	
		
				if($this->WhereData ==null)
				{
					
					$query_data="select * from ".$this->SelectTable;
			
						
				}
				if($this->WhereData !=null)
				{
					
					$query_data="select * from ".$this->SelectTable." where ".$this->WhereData;
			
				}
			
				if($this->ShowQuery==1)
				{
					echo $query_data;
				}

				

				if($this->ShowNav==1)
				{
					   $per_page=$this->line_per_page;
					   $page_space=$this->page_space;
					   $nav_param=$this->NavParam;
					   $count=1;
					   $get_page=$this->get_page;
					   if ( !$get_page ) 
					   {		$get_page = 1; }
								$prev_page = $get_page - 1; 
								$next_page = $get_page+ 1; 
								$page_start = ( $per_page * $get_page) - $per_page; 
								// calculate start no. for list count no.
								$count=(( ($per_page)*($get_page) )-$per_page)+1;
								////////////
								$result_count=mysql_query($query_data);

								$query_data .= " LIMIT ".$page_start." , ".$per_page; 
								$result_data= mysql_query($query_data); 
								$result_num_record=mysql_num_rows($result_count);
								$num_rows=$result_num_record;
								
								// if all record less than per page variable that define num_page to 1 (page no.1)
											if ( $num_rows <= $per_page ){
								$num_pages = 1; 
											}else if ( ( $num_rows % $per_page ) == 0 ){
								$num_pages = ( $num_rows / $per_page ); 
											}else{
								$num_pages = ( $num_rows / $per_page ) + 1; 
								$num_pages = ( int ) $num_pages; }
				
				
								//// create previous button
								echo "<table width=1024>";
								echo "<tr>";
								if($get_page==1){echo "<td>|";}

								if ( $prev_page ){echo "<td><a href=".$_SERVER['PHP_SELF']."?page=".$prev_page."&".$nav_param."><img border=0 src=images/previous_arrow.gif>Previous </a>|"; }

								$i=1;
								//////////////////  create number of page ////////////////////////////////
								while($i<=$num_pages)	
									{ 
									if ( $i != $get_page) 
										{
										if(($i<=($get_page+$page_space))&&($i>=($get_page-$page_space))  )
										  {
										echo "<a href=".$_SERVER['PHP_SELF']."?page=".$i."&".$nav_param."><b>&nbsp;".$i."&nbsp;</b></a>|";}
										}elseif($i==$get_page){echo "<b>&nbsp;".$i."&nbsp;</b>|";}
											$i++;
									}

								/////////////////// create next button /////////////////////////////////////
								if ( $get_page != $num_pages ) {echo "<a href=".$_SERVER['PHP_SELF']."?page=".$next_page."&".$nav_param."> Next</a><img border=0 src=images/next_arrow.gif> </td>"; }

								echo "</tr>";
								echo "</table>";
								echo "<table><tr><td>".number_format($num_rows)." Records: ".number_format($get_page)." of ".number_format($num_pages)." pages</td></tr></table>"; 
								}
								if($this->ShowNav==0)
								{
								}
			
								if($this->ShowData==1)
								{
										$show_field=$this->SelectField;
										$show_field=explode(" ",$show_field);
										while($object_data=mysql_fetch_array($result_data))
										{
											?>
											<div class="data_row">
											<?
													$count_field=0;
													while($count_field<count($show_field))
													{
														
														?>
														<div class="data_field">
															<?=$object_data[$show_field[$count_field]];?>
														</div>
														<?
														$count_field++;
													}
											?>
											</div>
											<?
										}
									
									}
				
		}
		
		function SelectRecord()
		{
			if($this->SelectField !=null)
				{	
					$selectField=$this->SelectField;
				}else{
					$selectField="*";
				}
				
				if($this->WhereData ==null)
				{	
					$query_data="select ".$selectField." from ".$this->SelectTable;
				}

				if($this->WhereData !=null)
				{
					$query_data="select ".$selectField." from ".$this->SelectTable." where ".$this->WhereData;
				}

				
				
				if($this->DataOrder!=NULL)
				{
					$query_data .=" order by ".$this->DataOrder;
				}

				if($this->DataLimit !=null)
				{
					$query_data .=" limit ".$this->DataLimit;
				}
				if($this->ShowQuery==1)
				{
					echo $query_data;
				}
					$result_data=mysql_query($query_data);
				
					return $result_data;
				
		}
 
	function InsertRecord(){
	
		$insert_query="insert into ".$this->SelectTable." (".$this->InsertField.") values (".$this->DataField.")";
		$insert_result=mysql_query($insert_query);
		if($this->ShowQuery==1)
				{
					echo $insert_query;
				}
		if($insert_result)
		{return true;}else{return false;}
	}

	function DeleteRecord(){
	
		$delete_query="delete from ".$this->SelectTable." where ".$this->DeleteField."";
		$delete_result=mysql_query($delete_query);

		if($delete_result)
		{return true;}else{return false;}
	}
function UpdateRecord(){
	
		$update_query="update ".$this->SelectTable." set ".$this->UpdateField." where ".$this->WhereData."";
		$update_result=mysql_query($update_query);

		if(mysql_affected_rows()>0)
		{return true;}else{return false;}
	}

	function __destruct(){
		@mysql_free_result($result_data);
		@mysql_free_result($insert_result);

	}
}

?>



ตามประสา งูๆ ปลาๆ ครับ

คราวนี้ผมก็ include เข้ามา แล้วเรียกใช้อีก file นึง

Code (PHP)
                        $clsMyDB->SelectTable="favs_category";
			$clsMyDB->WhereData="category_id='".$objSelect['category_id']."' and member_id='".$_SESSION['valid_member_id']."' ";			
			$clsMyDB->DataOrder="category_id ASC";
			//$clsMyDB->ShowQuery=1;
			$fetchOldData=$clsMyDB->SelectRecord();
			$num_rows=mysql_num_rows($fetchOldData);
			if($num_rows==1){
				$class_style="favs_category_box_toggle2";
				?>
				<script type="text/javascript">
							$('#category_array').val($('#category_array').val()+" "+"<?=$objSelect['category_id']?>");
				</script>
				<?
			}else{
				$class_style="favs_category_box_toggle1";
			}


                         $clsMyDB->SelectTable="topic left join blog on topic.blog_id=blog.blog_id";
					                    //$clsMyDB->SelectField="topic.add_type_id,topic.topic_id,topic.topic_counter,topic.subject,topic.description,topic.member_id, blog.access_level";
					$clsMyDB->DataOrder="topic.topic_counter DESC";
					//$clsMyDB->ShowQuery=1;
					$clsMyDB->WhereData="blog.category_id='".$objSelect['category_id']."'";
					$clsMyDB->DataLimit=5;
					$fetchDataTopic=$clsMyDB->SelectRecord();
	
					

					while($getChild=mysql_fetch_array($fetchDataTopic))
					{ code บลาๆๆๆ}


จากเงื่อนไขแรกผมก็เรียกดูข้อมูลได้ปกตินะครับ แต่พอเงื่อนไข 2 ผมก็ต้องการเรียกซ้อนลึกลงไปอีกชั้นนึง
ปรากฏว่า ตัวแปร $clsMyDB มันดันดึง query แรกมาประมวลผลซะงั้น

ไม่รู้ผมอธิบายเข้าใจมั้ยนะครับ code บางส่วนตัดออก มันยาว
เพราะ
$clsMyDB=new DBTools();
$clsMyDB->DBCharSet="UTF8";
$clsMyDB->ConnDatabase($MyHost,$MyDB,$MyUsername,$MyPassword);
ก็อยู่ใน include ไฟล์นึง เอาเป็นว่ามันทำงานได้ชัวร์

แต่ปัญหาคือ ถ้าเรียก function oop ซ้อนกัน บางครั้งมันจะเรียก $clsMyDB บางค่าจากเงื่อนไขแรก
มาเกี่ยวกับเงื่อนไขล่าง เหมือนมันไม่ clear หรือเริ่มรับค่าใหม่
อยากให้เมื่อเรียก $clsMyDB->SelectTable="บลาๆ"; ให้่มัน clear ค่า SelectField ,DataOrder, ShowQuery,WhereData จากเงื่อนไขแรก อะไรประมาณนี้ เพราะมันจะเอาค่าพวกนี้จากเงื่อนไขแรกมาทำงานในเงื่อนไขสองด้วย

แก้ไขยังไงดีครับ



Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-05-28 22:28:25 By : slack_man View : 847 Reply : 3
 

 

No. 1



โพสกระทู้ ( 1,994 )
บทความ ( 10 )



สถานะออฟไลน์
Facebook Blogger

ที่มันไม่เคลียร์ค่าก็เพราะหน้าที่เรียกใช้คำสั่ง ยังทำงานไม่จบอาจจะต้องเรียกใช้อีกหลายครั้ง เช่น

$clsMyDB->SelectTable = "favs_category";

คำสั่งแรกอาจจะนับจำนวนทั้งหมดที่อยู่ในเงื่อนไข
คำสั่งที่สองเพื่ออัพเดต ตาราง
คำสั่งที่สาม ....


พอใช้ตารางใหม่
$clsMyDB->SelectTable="topic left join blog on topic.blog_id=blog.blog_id";


ค่า SelectField ,DataOrder, ShowQuery,WhereData ก็จะติดมาด้วย
แก้โดยถ้าไม่ใช้แล้วก็เซ็ตเป็น NULL ไปเลยครับ

ดูจากโค๊ด
Code (PHP)
if($this->WhereData ==null)
{
     $query_data="select * from ".$this->SelectTable;
}


ถ้าเซ็ต

$clsMyDB->WhereData = null; 
$clsMyDB->SelectField = null;

//แล้วเรียก 
$clsMyDB->SelectTable = "ตารางใหม่";


เงื่อนไขเดิมก็จะหายไป หรือเป็นไปตามเงื่อนไขใหม่ที่กำหนดนอกเหนือจาก NULL








ประวัติการแก้ไข
2013-05-28 23:21:02
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-28 23:19:40 By : {Cyberman}
 


 

No. 2



โพสกระทู้ ( 51 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณครับ ตอนนี้ทำ function เสริมให้มัน clear ก่อนเรียกทุกครั้งละ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-29 00:03:53 By : slack_man
 

 

No. 4



โพสกระทู้ ( 1,994 )
บทความ ( 10 )



สถานะออฟไลน์
Facebook Blogger

ตอบความคิดเห็นที่ : 2 เขียนโดย : slack_man เมื่อวันที่ 2013-05-29 00:03:53

ลองเอาโค๊ดนี้ไปใช้ดูนะครับรองรับ mysqli ด้วยครับ
Connect To Your Database Using OOP PHP5 With Mysql And Mysqli

พอได้คลาสหลักแล้ว ก็สร้างคลาสสำหรับบันทึกลงแต่ละตารางเพื่อง่ายต่อการเรียกใช้

เช่น มีตาราง tb_student ก็สร้างคลาส

Class Student extends MainClass 
{
      const tbName = "tb_student";

      public function load()
      {

      }
     
      public function insert()
      {

      }

      public function update()
      {

      }

      public function delete()
      {

      }

      //.... เมธอดอื่นๆ ของแต่ละตาราง
      //.... 
      //.... 
      //.... 
      //.... 

}



ฐานข้อมูลเรามีกี่ตารางก็สร้างคลาสตามนั้น เวลาเรียกใช้ก็จะแยกออกจากกัน
โดยไม่ต้องประกาศชื่อตาราง หรือเงื่อนไขทุกครั้งที่เรียกใช้

มาเรียนรู้ OOP ไปด้วยกันนะครับ ^^
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-29 06:56:27 By : {Cyberman}
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามเรื่อง oop ของ Mysql Connection มันไม่ clear ค่าเมื่อเรียก function ซ้ำกัน
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่