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 > รบกวนช่วยดู error ให้หน่อยครับ >> Call to a member function query() on a non-object



 

รบกวนช่วยดู error ให้หน่อยครับ >> Call to a member function query() on a non-object

 



Topic : 111239



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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




คือก่อนหน้านี้ก็ใช้ได้นะครับ แต่พอเปลี่ยนมาใช้ PHP Version 5.4.31 (xammp) ก็เป็นปัญหา

**my-class.php
Code (PHP)
class myODBC {
var $_conn;
function __construct($server_name,$connect_info){
$this->_conn = sqlsrv_connect( $server_name, $connect_info);
}
/**** function connect to database ****/

function query($query,$debug = false){
$dataset = array();
$result = sqlsrv_query($this->_conn,$query);
if($result){
while($row = @sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)){
$item = array();
foreach($row as $key => $data){
$item[$key] = $datax;
}
$dataset[] = $item;
}
}else{
$dataset[0]['query'] = 'error';
}
if($debug){
echo $query;
}
return $dataset;
}
function close (){
sqlsrv_close($this->_conn);
}
}


**config.php
Code (PHP)
$config['Database'] = "village_fund";
$config['UID'] = "village_fund";
$config['PWD'] = "village_fund";
$config['MultipleActiveResultSets'] = true;
$odbc = new myODBC("WEBNUN",$config);


**header.php
Code (PHP)
require_once ("class.myODBC.php");
require_once ("config.php");


**index.php
Code (PHP)
ob_start();
session_start();
include("include/header.php");
$data = $odbc->query("SELECT * FROM tbl_main");




Tag : PHP, Ms SQL Server 2008







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-09-11 09:33:27 By : babyprogrammer View : 1836 Reply : 9
 

 

No. 1

Guest


ไหนๆ ก็จะ oop แล้ว ก็เอาให้เต็มรปแบบไปเลย

method ล้อของ .net น่าจะพอเข้าใจนะ


database\idatabase.php
<?php
namespace database;

interface idatabase {
                public function open_connection();

                public function close_connection($conn);

                public function execute_nonquery($conn, $query, $params);

                public function execute_query($conn, $query, $params );

                public function begin_transaction($conn);

                public function commit_transaction($conn, $querys);
        }
}
?>


database\sql_server.php
<?php
namespace database;

class sql_server implements idatabase {
	
	public function open_connection() {
		$connection_info = array("UID" => DB_USER,
								 "PWD" => DB_PASSWORD,
								 "Database" => DB_NAME,
								 "CharacterSet" => DB_CHARACTERSET);

		$conn = sqlsrv_connect(DB_HOST, $connection_info);

		if ($conn === FALSE) {
			echo "Unable to connect.<br />";
			die(print_r(sqlsrv_errors(), TRUE));
		}

		return $conn;
	}

	public function close_connection($conn) {
		sqlsrv_close($conn);
	}

	public function execute_nonquery($conn, $query, $params = FALSE) {
		$resource = ($params === FALSE) ? sqlsrv_query($conn, $query) : sqlsrv_query($conn, $query, $params);

		if ($resource === FALSE) {
			echo "Error in executing query.<br />";
			die(print_r(sqlsrv_errors(), TRUE));
		}

		return $resource;
	}

	public function execute_query($conn, $query, $params = FALSE) {
		$resource = ($params === FALSE) ? sqlsrv_query($conn, $query) : sqlsrv_query($conn, $query, $params);

		if ($resource === FALSE) {
			echo "Error in executing query.<br />";
			die(print_r(sqlsrv_errors(), TRUE));
		}

		$results = array();

		while ($row = sqlsrv_fetch_array($resource)) {
			$result = new query_result();

			foreach ($row as $key => $value) {
					$result->$key = $value;
			}

			$results[] = $result;
		}

		return $results;
	}

	public function begin_transaction($conn)
	{
		if (sqlsrv_begin_transaction($conn) === FALSE ) {
			echo "Cann't begin transaction.<br />";
			die(print_r( sqlsrv_errors(), TRUE));
		}
	}

	public function commit_transaction($conn, $querys)
	{
		$result = is_array($querys);

		if ($result === TRUE) {
			foreach ($querys as $q) {
					$result = $result && $q;
			}

			if ($result === TRUE) {
					sqlsrv_commit($conn);
			}
			else {
					sqlsrv_rollback($conn);
			}
		}

		return $result;
	}
}
?>


database\query_result.php
<?php
namespace database;

class query_result {
	private $_results = array();

	public function __set($key, $value) {
		$this->_results[$key] = $value;
	}

	public function __get($key) {
		if (isset($this->_results[$key])) {
			return $this->_results[$key];
		}
		else {
			return null;
		}
	}
}
?>


database\include.php
<?php
	// Database
	define('DB_HOST', 'localhost\sqlexpress');
	define('DB_NAME', 'SqlServer2008');
	define('DB_USER', '');
	define('DB_PASSWORD', '');
	define('DB_CHARACTERSET', 'UTF-8');
?>


index.php
<?php
require_once (dirname(__FILE__) . '/database/include.php');

// autoload
spl_autoload_extensions(".php");
spl_autoload_register();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>PHP OOP</title>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
</head>
<body>
			<form id="form1" name="form1" method="post">
<?php
	$sqlsvr = new database\sql_server();
	$conn = $sqlsvr -> open_connection();

	$query = "SELECT ID, SectionCode, SectionName FROM Section WHERE ID BETWEEN ? AND ? OR ID = ? OR SectionName = ?";
	$params = array(2, 5, 7, 'OPD');
	$result = $sqlsvr -> execute_query($conn, $query, $params);

	if ($result) {
		foreach ($result as $r) {
			echo "<a href=\"$r->SectionCode\">$r->SectionName</a><br />";
		}
	}

	$sqlsvr -> close_connection($conn);
?>
	</form>
</body>
</html>







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-11 10:00:05 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 2



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

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

Good!
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-11 10:19:07 By : mr.win
 

 

No. 3



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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


สอบถามต่ออีกนิดนึงครับ สมมุติว่าไฟล์ที่จะเรียกใช้ class อยู่ที่พาท modules\member\member_save_data\member_save.php เราต้องเรียกอย่างไรครับ คือที่ผมลองแจ้งว่า spl_autoload(): Class database\sql_server could not be loaded คือไฟล์ member_save.php นี้ไม่ได้ถูก include มาไว้ใน index อ่ะครับ เป็นเหมือนกับว่าไฟล์นี้จะทำหน้าที่บันทึกหลังจากกดปุ่มจากหน้าหลัก

Code (PHP)
ob_start();
session_start();

require_once ('../../../database/include.php');
// autoload
spl_autoload_extensions(".php");
spl_autoload_register();

$sqlsvr = new database\sql_server();
$conn = $sqlsvr -> open_connection();

$query2 = "INSERT INTO tbl_main ( id , name ) VALUES ( 5 , 'บี๋' )";
$result2 = $sqlsvr->execute_query($conn, $query2);

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-11 12:24:36 By : babyprogrammer
 


 

No. 4

Guest


Quote:
สมมุติว่าไฟล์ที่จะเรียกใช้ class อยู่ที่พาท modules\member\member_save_data\member_save.php เราต้องเรียกอย่างไรครับ


Code (PHP)
spl_autoload_extensions(".php");
spl_autoload_register();

use modules\member\member_save_data\member_save;

$obj = new member_save();

// ชื่อ class ต้องชื่อเดียวกับชื่อไฟล์
// ชื่อ namespace ต้องอันเดียวกับ folder
// ยกตัวอย่างเป็นในที่นี่ path = modules\member\member_save_data\member_save.php
// ดังนั้น namespace = modules\member\member_save_data;


วิธีใช้ class สำหรับ insert

Code (PHP)
ob_start();
session_start();

require_once ('../../../database/include.php');
// autoload
spl_autoload_extensions(".php");
spl_autoload_register();

ีuse database\sql_server;

$sqlsvr = new sql_server();
$conn = $sqlsvr -> open_connection();

$query = "INSERT INTO tbl_main ( id , name ) VALUES ( ?, ?)";
$params = array( 5 , 'บี๋' );
$sqlsvr->execute_nonquery($conn, $query, $params);

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-11 12:38:09 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 5



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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


ผมยังงง อยู่รบกวนอีกทีนะครับ ไม่รู้ว่าผมใส่ผิดตรงไหน

member.php ไฟล์นี้จะถูก include ใส่ใน index
Code (PHP)
<button type="button" class="btn btn-success" onClick="FncMember();" data-toggle="modal"><i class="icon-ok icon-white"></i> บันทึก</button>


fnc_member.js
Code (Java)
function FncMember(){
		$.ajax({
				type:'POST',
				cache: false ,
				url:'modules/member/member_save_data/member_save.php',
				//data: 'action=load-data&'+data_elearn_subj_search,
				beforeSend: function(){  
					//$("#show_save").html("<img src='images/loading2.gif'>&nbsp;กำลังโหลดข้อมูล กรุณารอ......");  
					///$("#btn_save").attr("disabled", "disabled");
				},
				success: function(res){				
					/*$("#btn_save").removeAttr("disabled");
					$("#show_save").html("");	*/		
	//				$('#box_show_subject').html(res);
					alert(res);
				},
				error: function(XMLHttpRequest, textStatus, errorThrown) {
					alert(errorThrown);
				}
			});	
	
}



Code (PHP)
ob_start();
session_start();

require_once ('../../../database/include.php');
// autoload
spl_autoload_extensions(".php");
spl_autoload_register();

use modules\member\member_save_data\member_register_savedata;
$sqlsvr = new member_register_savedata();
$conn = $sqlsvr->open_connection();

$query2 = "INSERT INTO tbl_main ( id , name ) VALUES ( 5 , 'บี๋' )";
$result2 = $sqlsvr->execute_query($conn, $query2);

$sqlsvr -> close_connection($conn);

// error ที่เกิด <b>Fatal error</b>:  spl_autoload(): Class modules\member\member_save_data\member_save could not be loaded 



ประวัติการแก้ไข
2014-09-12 14:01:07
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-12 14:00:14 By : babyprogrammer
 


 

No. 6

Guest


modules\member\member_save_data\member_register_savedata.php
namespace modules\member\member_save_data;

class member_register_savedata {
..
..
..
}


insert update ใช้ execute_nonquery

select ใช้ execute_query
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-12 16:07:44 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 7



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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


ในหน้า member_register_savedata.php นี่เราต้องสร้างเป็น class หรอครับ ผมเข้าใจว่าไฟล์นี้จะเขียน insert ได้เลย เพราะไฟล์นี้ของผมจะต้องใช้ทั้ง ดึงข้อมูล ลบข้อมูลด้วย ถ้าจะทำแบบไม่ต้องทำเป็น class แบบนั้นอีกได้ไหมครับ ช่วยชี้แนะด้วยครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-12 16:22:08 By : babyprogrammer
 


 

No. 8

Guest


modules\member\member_save_data\member_register_savedata.php
<?php
namespace modules\member\member_save_data;

class member_register_savedata implements idatabase {
	
	public function open_connection() {
		$connection_info = array("UID" => DB_USER,
								 "PWD" => DB_PASSWORD,
								 "Database" => DB_NAME,
								 "CharacterSet" => DB_CHARACTERSET);

		$conn = sqlsrv_connect(DB_HOST, $connection_info);

		if ($conn === FALSE) {
			echo "Unable to connect.<br />";
			die(print_r(sqlsrv_errors(), TRUE));
		}

		return $conn;
	}

	public function close_connection($conn) {
		sqlsrv_close($conn);
	}

	public function execute_nonquery($conn, $query, $params = FALSE) {
		$resource = ($params === FALSE) ? sqlsrv_query($conn, $query) : sqlsrv_query($conn, $query, $params);

		if ($resource === FALSE) {
			echo "Error in executing query.<br />";
			die(print_r(sqlsrv_errors(), TRUE));
		}

		return $resource;
	}

	public function execute_query($conn, $query, $params = FALSE) {
		$resource = ($params === FALSE) ? sqlsrv_query($conn, $query) : sqlsrv_query($conn, $query, $params);

		if ($resource === FALSE) {
			echo "Error in executing query.<br />";
			die(print_r(sqlsrv_errors(), TRUE));
		}

		$results = array();

		while ($row = sqlsrv_fetch_array($resource)) {
			$result = new query_result();

			foreach ($row as $key => $value) {
					$result->$key = $value;
			}

			$results[] = $result;
		}

		return $results;
	}

	public function begin_transaction($conn)
	{
		if (sqlsrv_begin_transaction($conn) === FALSE ) {
			echo "Cann't begin transaction.<br />";
			die(print_r( sqlsrv_errors(), TRUE));
		}
	}

	public function commit_transaction($conn, $querys)
	{
		$result = is_array($querys);

		if ($result === TRUE) {
			foreach ($querys as $q) {
					$result = $result && $q;
			}

			if ($result === TRUE) {
					sqlsrv_commit($conn);
			}
			else {
					sqlsrv_rollback($conn);
			}
		}

		return $result;
	}
}
?>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-12 16:27:46 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 9



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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


ถ้าแบบนี้ก็เหมือนกับว่าใน modules มี
modules/member/member_save_date
modules/account/account_save_date

ผมต้องทำ class แบบตัวอย่างที่ทำให้ดู ไว้ในพาทข้างบนใช่ไหมครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-12 16:36:49 By : babyprogrammer
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : รบกวนช่วยดู error ให้หน่อยครับ >> Call to a member function query() on a non-object
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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 อัตราราคา คลิกที่นี่