call to a member function query() in ....

simon803 2007-07-16 02:33:52
<?php
class BasicModel{
protected $DB = NULL;
protected $table_name = NULL;
protected $_primary = NULL;
protected $_fieldList = NULL;
public $is_error = false;
public $error_msg = "";

protected function set_primary($var_name){
$this->_primary = $var_name;
}

protected function set_field_list($fieldList){
$this->_fieldList = $fieldList;
}

protected function set_table_name($table_name){
$this->table_name = $table_name;
}

//建立一个PDO数据库连接
protected function get_a_db_ob(){

$db_host = "localhost";
$db_username = "root";
$db_password = "";
$db_name = "mytestdb";

try{
$this->DB = new PDO(
"mysql:dbname=$db_name;host=$db_host;charset=utf-8",
"$db_username",
"$db_password"
);
$this->DB->query("Set Names 'UTF8'");

}catch (PDOException $e){

$this->is_error = true;
$this->error_msg = $e->getMessage();

}

}


//插入一条对象记录到数据库。。
protected function insert_into_DB(){
foreach ($this->_fieldList as $field){
$fields .= "`$field`,";
$values .= "'".$this->$field."',";
}
$fields = trim($fields,',');
$values = trim($values,',');
$query = "INSERT INTO `$this->table_name` ($fields) VALUES ($values)";
if(!$this->DB->query($query)){
$this->is_error = true;
$this->error_msg = $this->DB->errorInfo();
return false;
}else {
return $this->DB->lastInsertId();
}
}

}
?>

就是这个 ...提示错误是call to a member function query() in ....
就是if(!$this->DB->query($query))出错...
我用isset($this->DB)?"11":"22"; 显示22 ,也就是$this->DB 找不到 ...
上边明明实例化了啊($this->DB = new PDO() ;) ...
...全文
1656 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
foolbirdflyfirst 2007-07-20
  • 打赏
  • 举报
回复
win
simon803 2007-07-20
  • 打赏
  • 举报
回复
你在WIN下还是LINUX下测试的 ?
foolbirdflyfirst 2007-07-19
  • 打赏
  • 举报
回复
拷贝你代码运行了下,改了点无关紧要的东西,是成功的,win下.
你可以phpinfo()下,查找PDO,看是否支持PDO.
simon803 2007-07-19
  • 打赏
  • 举报
回复
别沉了啊 。。。
网上很多人遇到这种情况 。。 最后都不了了之 。。。
simon803 2007-07-17
  • 打赏
  • 举报
回复
恩 .. 我再装PDO试下 ..你给的那个网站很好..
介绍了LINUX下的安装 ..谢谢啊 !!!

其实我之前在本地也出过这个错,后来我把环境从新安装,又好了 ..
所以我一直认为是哪的配置有问题... 或者是程序本身不规范..
foolbirdflyfirst 2007-07-17
  • 打赏
  • 举报
回复
既然你在win下测试成功,说明程序运行无错。
当然你可以一步步调试(比如try{..}catch{echo '无法实例化';}之类)看到底问题根源在哪,我的意见是你朋友机器PDO未安装.:-).
simon803 2007-07-17
  • 打赏
  • 举报
回复
程序本身没问题吗 ?
foolbirdflyfirst 2007-07-17
  • 打赏
  • 举报
回复
不好意思,对linux不熟。看看:
http://doc.sheup.com/linux/linux4579.htm
simon803 2007-07-17
  • 打赏
  • 举报
回复
你给的这个网页我看过 。。。 那是在WIN系统下的 。。我本地就是那样 。。
我在朋友机器(LINUX)上测试就不成功了 。。
是不是PDO没装好 ,。。 LINUX下PDO怎么安装啊 ?
simon803 2007-07-17
  • 打赏
  • 举报
回复
你意思是可能PDO安装不正确吧 ?
但我记得PDO要是没装提示错误是找不到class PDO
郁闷了 。。。
foolbirdflyfirst 2007-07-17
  • 打赏
  • 举报
回复
我不明白的就是为什么在本地可以测试成功 ?
到底哪不规范 ?
------------------------------------------------
这么看来问题应该是无法实例化PDO,请确认所需的配置是否完成。

http://www.vshj.com/formality/2006/200611/20061101225905.shtml
simon803 2007-07-17
  • 打赏
  • 举报
回复
<?php

require_once("class_basic.php");

class news extends BasicModel{

protected $id = NULL;
protected $title = NULL;
protected $datetime = NULL;
protected $keyword = NULL;
protected $category = NULL;
protected $content = NULL;
protected $views = NULL;


public function __construct(){

$this->set_primary("id");

$this->set_table_name("news");

$fieldList = array("id","title","datetime","keyword","category","content","views");

$this->set_field_list($fieldList);

$this->get_a_db_ob();

}


public function create(){

if ($this->insert_into_DB()==true){
return true;
}else {
return false;
}

}

}

?>

就是这个 ... 它调用class_basic.php里边的insert_into_DB()遇到query错误 ..
我不明白的就是为什么在本地可以测试成功 ?
到底哪不规范 ?
我本地的register_golbals = On ,别人机器是Off ,但我把本地设置为Off还是运行成功。。可见跟这个配置没关系 。。。
simon803 2007-07-17
  • 打赏
  • 举报
回复
问题依旧 。。。。
foolbirdflyfirst 2007-07-16
  • 打赏
  • 举报
回复
把你调用这个类的程序贴出来看看。
simon803 2007-07-16
  • 打赏
  • 举报
回复
错误就在这儿
$query = "INSERT INTO `$this->table_name` ($fields) VALUES ($values)";
if(!$this->DB->query($query)){ ... }

现在提示query找不到对象 .. 就是找不到$this->DB ...
可我明明有实例化啊 !~
foolbirdflyfirst 2007-07-16
  • 打赏
  • 举报
回复
这类可以这么写,关键看你如何调用。
simon803 2007-07-16
  • 打赏
  • 举报
回复
别人机器应该装PDO了 , 因为如果没装会提示找不到class PDO

我在本地测试完全正确,插入数据库、提取数据都正常 。。。。

我想问下,我那段程序符合规范吗 ?
foolbirdflyfirst 2007-07-16
  • 打赏
  • 举报
回复
其实在我本地测试是成功的,在别人机器上就不好使了 ... 是配置问题还是程序本身的问题 ?
================================================================================
这个……别人的机器,有可能没开PDO扩展,你在本地测试成功,插入的数据处理能正常入库?
foolbirdflyfirst 2007-07-16
  • 打赏
  • 举报
回复
if($this->get_a_db_ob()).. 判断结果是错误 ...
========================================
那就是没实例化没成功,
simon803 2007-07-16
  • 打赏
  • 举报
回复
按照你说的,在protected function insert_into_DB()里边做判断
if($this->get_a_db_ob()).. 判断结果是错误 ...

其实在我本地测试是成功的,在别人机器上就不好使了 ... 是配置问题还是程序本身的问题 ?
加载更多回复(4)
本课程主要以口袋西游为例,学习一个网络游戏是怎么通过游戏服务器与玩家客户端进行通信交互的,通过OD,CE等工具对游戏进行调试,找到各个数据基址(例如角色基址,背包基址等),找出游戏里面的功能CALL(例如寻路CALL,打坐CALL等)及参数分析,并且编码实现功能。本课程可以带领你游戏逆向入门可以学会 CE,OD,找游戏基址,功能CALL等实现变态功能可以更深入的理解从高级语言到汇编语言的一个对应过程可以学会 逆向软件  外挂与反外挂 破解防破解  游戏安全的基础知识可以为以后的及逆向高级课程 打下良好的基础可以自己分析游戏数据,用C语言实现游戏外挂功能等重点:  本套课程的重点就是带领大家分析游戏数据,毫不客气的说,各位学完此套课程对分析游戏数据这块会有一个质的飞跃。课程目录  01.课程简介及功能演示  02.CE找人物基址及人物属性偏移  03.OD找人物基址及人物属性偏移  04.创建MFC DLL项目  05.代码实现输出人物信息  06.发包函数概述  07.怎么看待重写的发包函数  08.普通发包与线程发包  09.找打坐CALL及参数分析  10.代码实现打坐CALL  11.喊话CALL及参数分析  12.代码实现喊话CALL  13.找寻路CALL及参数分析  14.代码编写寻路CALL  15.穿装备CALL及参数分析  16.代码实现穿装备CALL  17.NPC对话CALL  18.代码实现NPC对话CALL  19.唤出宠物  20.宠物合体  21.收回宠物  22.取下宠物

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧