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,037

HOME > PHP > PHP Forum > สอบถาม PHP แบบ PDO เชื่อต่อฐานข้อมูลแบบ Class Function เป็นแนวทางหน่อยครับ



 

สอบถาม PHP แบบ PDO เชื่อต่อฐานข้อมูลแบบ Class Function เป็นแนวทางหน่อยครับ

 



Topic : 136592



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



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




สอบถาม PDO mysql แบบ class function หน่อยครับ
พอดีมือใหม่ PHP PDO ครับ

ไม่ขึ้นอะไรเลยไม่ทราบมีแนวทางการเขียนโค้ส PHP แบบ PDO เชื่อต่อฐานข้อมูลแบบ Class function เป็นแนวทางไหมครับ

Code (PHP) - function.php
<?php

class DBConnection{

    private $conn;

    public function __construct($user, $password, $database, $host) {
        $this->user = $user;
        $this->password = $password;
        $this->database = $database;
        $this->host = $host;
    }

    public function Connect(){
        try {
            $this->conn = new PDO("mysql:host=$host;dbname=$database", $user, $password);
            $this->conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
            $this->conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

        } catch (Exception $e) {
            echo 'ERROR: ' . $e->getMessage();
        }
    }

    public function Query($sql){
        return $this->conn->prepare($sql);
    }
}

public function List_IDCard() {
  $db = new DBConnection();
  $result = $db->Query("SELECT * FROM idcard ORDER BY id");
  $result->execute();
  return $result;
}

?>



Code (PHP) - config.php
<?php
ini_set('display_errors',0);
error_reporting(0);

define("DB_HOST","localhost");
define("DB_USER","root");
define("DB_NAME","DatabaseName");
define("DB_PASS","Password");
?>




Code (PHP) - index.php
<?php
session_start();

require_once 'config.php';
require_once 'function.php';

date_default_timezone_set('Asia/Bangkok');

$db = new DBConnection(DB_USER, DB_PASS, DB_NAME, DB_HOST);

?>

<!DOCTYPE html>
<html dir="ltr">

<head>
    <meta charset="utf-8">
</head>

<body>
  <?php
    $stmt = $db->List_IDCard();
    while($objResult = $stmt->fetch( PDO::FETCH_ASSOC )){
       echo $objResult[IDNumber]."<BR>";
    }
  ?>
</body>


</html>




Tag : PHP, MySQL, Appserv







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2022-02-16 18:04:13 By : KenJeRoKung View : 1645 Reply : 6
 

 

No. 1



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



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


Code (PHP)
    public function Query($sql){
        return $this->conn->prepare($sql);
    }
// ย้ายมาไว้ตรงนี้
    public function List_IDCard() {
       $result = $this->conn->Query("SELECT * FROM idcard ORDER BY id");
       $result->execute();
       return $result;
    }
}

/*  อยู่ผิดที่
public function List_IDCard() {
  $db = new DBConnection();
  $result = $db->Query("SELECT * FROM idcard ORDER BY id");
  $result->execute();
  return $result;
}
*/







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-02-16 19:13:17 By : Chaidhanan
 


 

No. 2



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



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


ตอบความคิดเห็นที่ : 1 เขียนโดย : Chaidhanan เมื่อวันที่ 2022-02-16 19:13:17
รายละเอียดของการตอบ ::


HTTP ERROR 500

ไม่ทราบเป็นที่ AppServ หรือป่าว T_T



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-02-16 19:27:44 By : KenJeRoKung
 

 

No. 3



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



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


เวลาเขียนโค้ดให้เปิดแสดง error ทุกอย่างด้วย
ไม่ใช่ไปปิดมันเอาไว้

ที่มันไม่ขึ้นอะไรเลยเพราะมันมี error ที่ทำงานไม่ได้ แล้วมันจะแจ้งให้เรารู้แต่เรากลัวไม่กล้ารับรู้ ไปปิดมันเอาไว้ นึกว่าดีแต่เป็นการทำที่ผิด ผิด ผิด!
ถ้าจะปิด error บน production site หรือบนหน้าเว็บที่ใช้งานจริง ก็ควรต้องมีการเปิด error log เพื่อจะให้มันแจ้งผ่าน log ไม่มาเปิดเผยให้ผู้ใช้ดู

แล้วก็ใน error หรือการแจ้งเตือนมันจะมีระดับต่างๆ ตั้งแต่ notice, warning ไปจนถึงหนักๆคือ error
ระดับอื่นๆที่อยู่ก่อนระดับ error มันคือความผิดพลาดที่ยังทำงานต่อไปได้ แต่ควรแก้ไขอย่างยิ่ง
ส่วนระดับ error นี่คือทำงานต่อไม่ได้แล้ว ต้องแก้ไขเท่านั้น! (Execution of the script is halted.)
อ้างอิง https://www.php.net/manual/en/errorfunc.constants.php

อ่านแล้วหวังว่าจะเห็นประโยชน์ของมัน
แล้วก็เลิกอุดปาก error ในขั้นตอน development กันสักทีเถิดได้โปรด นะ ท่านผู้สอนทั้งหลายไม่ว่าใครเว็บไหนก็ตาม.
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-02-16 19:28:24 By : mr.v
 


 

No. 4



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



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


จากโค้ดของคุณ ใน method List_IDCard() คุณไปสร้าง new object คือ new DBConnection(); เอาไว้
โดยที่ตัว constructor ของมันต้องกำหนด argument ถึง 4 ตัว แต่คุณไม่กำหนดอะไรเลย
มันจึงแจ้ง error
Quote:
Fatal error: Uncaught ArgumentCountError: Too few arguments to function DBConnection::__construct(), 0 passed in xxx.php on line nnn and exactly 4 expected


ถ้าคุณเปิด error คุณจะเจอมันแจ้งแบบนี้ แล้วก็จะรู้เหตุด้วยเพราะมันบอกเอาไว้ให้แล้วครับ.

ตัว $db = new DBConnection(); ใน method นั้นไม่มีความจำเป็นต้องประกาศเลย เพราะมันอยู่ใน class ตัวเองอยู่แล้ว จะประกาศซ้ำๆซากๆไปทำไม ก็เปลี่ยนไปใช้ $this เพื่อเรียกใช้ property, method ในคลาสเดียวกันซะ

แต่ก็จะเจอ error อีกคือ
Quote:
Fatal error: Uncaught Error: Call to a member function prepare() on null
ภายใน method Query() เพราะว่า $this->conn ไม่มีการกำหนดอะไรเลยไม่มีการเรียกไว้ก่อน ซึ่ง $this->conn จะถูกเรียกและกำหนดใน method Connect() แต่ method Connect() ไม่เคยมีการเรียกใช้ก่อนเลย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-02-16 19:44:58 By : mr.v
 


 

No. 5



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



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


และเนื่องจากพบปัญหาย่อยหลายอย่าง เช่น กำหนดตัวแปรในการเชื่อมต่อ PDO ไม่ถูก, กำหนดคอลัมน์ id ในการแสดงผลไม่ถูก, ไปใช้ constant แทนที่จะใช้ array key เลยเขียนใหม่เลย
ก็ลองไปเทียบเคียงเอาเองนะครับ

Code (PHP)
<?php


class DBConnection
{

    private $conn;

    public function __construct($user, $password, $database, $host)
    {
        $this->user = $user;
        $this->password = $password;
        $this->database = $database;
        $this->host = $host;
        $this->Connect();
    }

    public function Connect()
    {
        try {
            $this->conn = new PDO("mysql:host=$this->host;dbname=$this->database", $this->user, $this->password);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $this->conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        } catch (Exception $e) {
            echo 'ERROR: ' . $e->getMessage();
        }
    }

    public function Query($sql)
    {
        return $this->conn->prepare($sql);
    }

    public function List_IDCard()
    {
        $result = $this->Query("SELECT * FROM datetime_subtable ORDER BY id");
        $result->execute();
        return $result;
    }
}



Code (PHP)
<?php
session_start();

require_once 'config.php';
require_once 'function.php';

date_default_timezone_set('Asia/Bangkok');

$db = new DBConnection(DB_USER, DB_PASS, DB_NAME, DB_HOST);

?>

<!DOCTYPE html>
<html dir="ltr">

<head>
    <meta charset="utf-8">
</head>

<body>
    <?php
    $stmt = $db->List_IDCard();
    while ($objResult = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $objResult['id'] . "<BR>";
    }
    ?>
</body>


</html>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-02-16 19:53:21 By : mr.v
 


 

No. 6



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



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


ตอบความคิดเห็นที่ : 2 เขียนโดย : KenJeRoKung เมื่อวันที่ 2022-02-16 19:27:44
รายละเอียดของการตอบ ::
ไม่ได้เกี่ยวกับ appserv


มันเกี่ยวที่คุณไม่เข้าใจการเขียน class oop ทำเป็นตัวอย่างไว้ให้
Code (PHP)
<?php
class DBConnection{
	// ประกาศตัวแปรให้ object รู้จัก
	private $conn;
	private $user;
	private $password;
	private $database;
	private $host;

	public function __construct($user='', $password='', $database='', $host='') {
		// ใส่ค่าให้กับ ตัวแปร 
		if( $user>'') {
			// ตรวจสอบตัวแปรที่การส่งค่ามาหรือไม่ ถ้ามีให้ใช้ตัวแปรที่ส่งมา
			$this->user = $user;
			$this->password = $password;
			$this->database = $database;
			$this->host = $host;
		}else{
			// ถ้าไม่มี ให้ใช้ ค่า default จาก constant ที่ประกาศไว้
			$this->user = DB_USER;
			$this->password = DB_PASS;
			$this->database = DB_NAME;
			$this->host = DB_HOST;
		}
	}

	public function Connect(){
		/* 
		นำตัวแปรใน class ที่ประกาศมาใช้   อ้างอิงตัวแปร ต้องอ้างอิงชื่อคลาสด้วย  $this->variable หรือ self::variable แล้วแต่รูปแบบที่ใช้ 
		ง่ายๆ คือ none static variable กับ  static variable หาอ่านเอาเด้อ ยาวอยู่ขึ้เกียจอธิบาย	
		*/		
		$host=$this->host; 
		$dbnm=$this->database;
		try {
			$this->conn = new PDO("mysql:host=$host;dbname=$dbnm", $this->user, $this->password);
			$this->conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
			$this->conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
		} catch (Exception $e) {
				echo 'ERROR: ' . $e->getMessage();
		}
	}

	public function Query($sql){
		return $this->conn->prepare($sql);
	}
	public function List_IDCard() {
		// $result = $this->conn->Query("SELECT * FROM idcard ORDER BY id"); บันทัดนี้ อ้างอิง ผิด ต้องอ้างอิง class
		$result = $this->Query("SELECT * FROM idcard ORDER BY id"); 
		// ตัด conn ออก เพราะเป็น PDO object ไม่ใช่ DBConnection Class
		$result->execute();
		return $result;
	}
}
?>

อ่านแล้วทำความเข้าใจ หน่อยครับ ไม่ละเอียดนักแต่พอที่จะ เริ่มต้นได้
ถ้าอยากละเอียด ผมรับสอน online นะครับ pm มาได้
รับสอนเป็น รายชั่วโมง ผ่าน video call ไม่รับสอนตามบ้าน กลัวโควิด และขี้เกียจเดินทาง


ปล.ทำตาม mr.v บอกด้วยนะครับ ขั้นตอน develope ต้องเปิดให้แสดง php error ด้วย


ประวัติการแก้ไข
2022-02-17 08:32:12
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-02-17 08:24:59 By : Chaidhanan
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถาม PHP แบบ PDO เชื่อต่อฐานข้อมูลแบบ Class 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 04
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 อัตราราคา คลิกที่นี่