如果读取远程数据库信息

#1 278086346

我这个程序使用的是数据库A
在某个功能页面中,我想调用数据库B的数据
我使用教程中的方法:

  • $dsn_mysql = spClass('db_mysql',array(
  •                 'host' => 'XXXXX', // 数据库地址
  •                 'port' => 3306,        // 端口
  •                 'login' => 'root',     // 用户名
  •                 'password' => 'XXXXXXX',      // 密码
  •                 'database' => 'XXXXXX',      // 库名称
  •         )
  • , SP_PATH.'SpeedPHP/Drivers/mysql.php', TRUE);
  •       $g->_db = $dsn_mysql;

[color=rgb(51, 102, 153) !important]复制代码

不知道这样写对不对,然后我想问下,这样之后怎么处理?
如果要查找的话,那个$zz_article=spClass("xll_article");   这种初始化类怎么写?

2016-06-21 15:34:24

#2 278086346

简单的说就是:在SPEEDPHP程序里面,的某个页面需要调用远程数据库的信息并显示出来。
请问怎么处理好点?

2016-06-21 15:37:17

#3 jake

稍微看看回复可以吗?

$dsn_mysql = spClass('db_mysql',array(array(  
                'host' => 'XXXXX', // 数据库地址
                'port' => 3306,        // 端口
                'login' => 'root',     // 用户名
                'password' => 'XXXXXXX',      // 密码
                'database' => 'XXXXXX',      // 库名称
        ))
, SP_PATH.'SpeedPHP/Drivers/mysql.php', TRUE);
      $g->_db = $dsn_mysql;

2016-06-21 15:43:17

#4 278086346

jake 发表于 2016-6-21 15:43
稍微看看回复可以吗?

$dsn_mysql = spClass('db_mysql',array(array(  
抱歉。刚才没有仔细看还有一个array
请问写完这个之后,我需要如何操作那个初始化类的问题?  因为没有model ,这样如何写呢

2016-06-21 15:53:59

#5 jake

278086346 发表于 2016-6-21 15:53
抱歉。刚才没有仔细看还有一个array
请问写完这个之后,我需要如何操作那个初始化类的问题?  因为没有m ...
新建个model类,写好里面的表名,用法跟model一样。
更换db链接只是底层改了指向,上层还是用model。

2016-06-21 16:04:41

#6 278086346

jake 发表于 2016-6-21 16:04
新建个model类,写好里面的表名,用法跟model一样。
更换db链接只是底层改了指向,上层还是用model。
明白原理了,我去操作试试,谢谢您的耐心指导

2016-06-21 16:06:21

#7 278086346

jake 发表于 2016-6-21 16:04
新建个model类,写好里面的表名,用法跟model一样。
更换db链接只是底层改了指向,上层还是用model。
执行错误: Table '现程序的库名.远程服务器的表名' doesn't exist我直接建立了model,对应远程服务器的表名来。   查询findAll 后,弹出这个提示,是不是还是没有调用到远程服务器的库?

还有一个想请教,这个更换db链接是一次性的,还是永久性?是否以后有代码是注销,换回原来的底层?

2016-06-21 16:22:26

#8 jake

建一个远程表的类
然后spClass它,用远程的链接参数
再findAll就是远程的。

如果要切回本地其他表,还要spClass原来的链接参数。

3.1版做多库是比较麻烦的事情呢

2016-06-21 16:26:40

#9 278086346

jake 发表于 2016-6-21 16:26
建一个远程表的类
然后spClass它,用远程的链接参数
再findAll就是远程的。
好的,我在试试,会一直期待您的新版本。
从2011年到现在,一直用这个程序在做开发,语法还是很简单。期望越来越好

2016-06-21 16:31:05

#10 jake

278086346 发表于 2016-6-21 16:31
好的,我在试试,会一直期待您的新版本。
从2011年到现在,一直用这个程序在做开发,语法还是很简单。期 ...
新版已经发布几个月了。。。但是和3.1版不兼容。

2016-06-21 17:19:32

#11 278086346

jake 发表于 2016-6-21 16:26
建一个远程表的类
然后spClass它,用远程的链接参数
再findAll就是远程的。
$dsn_mysql = spClass('ry_shichang',array(array(  
                'host' => '', // 数据库地址
                'port' => 3306,        // 端口
                'login' => 'root',     // 用户名
                'password' => '',      // 密码
                'database' => '',      // 库名称
        ))
, SP_PATH.'SpeedPHP/Drivers/mysql.php', TRUE);
$g->_db = $dsn_mysql;
$list=$this->list=$dsn_mysql->findAll();
还要麻烦下您。我是这样写的,远程类名是ry_shichang 请问这样写有错误吗?




另外问下,我之前都是下载3.1。新版本如果替换以前的程序,会报错吗?

2016-06-21 17:36:15

#12 278086346

278086346 发表于 2016-6-21 17:36
还要麻烦下您。我是这样写的,远程类名是ry_shichang 请问这样写有错误吗?

晕,把配置也写进去了,能帮我删除那个信息吗?

2016-06-21 17:40:46

#13 jake

上面代码帮你删除信息了,应该没写错吧,ry_shichang类存在就行。

新版和3.1版是不兼容的,不兼容,所以不能替换。新版建议在新的项目上用,3.1版保持,会持续更新的。

2016-06-21 18:15:12

#14 278086346

jake 发表于 2016-6-21 18:15
上面代码帮你删除信息了,应该没写错吧,ry_shichang类存在就行。

新版和3.1版是不兼容的,不兼容,所以不 ...
OK,谢谢,那个类是存在的。并且类里面的表是写的远程库的表信息。
但是他会提示:Fatal error: Call to a member function findAll() on a non-object in
一直显示不出我要查询的FINDALL。
   感觉像是没有修改到_DB信息,还是在本地的库查询这个表。如果没有写错,可能会是什么问题呢?




好的,3.1有更新就好了,要不以前程序都不知道怎么处理了。辛苦辛苦

2016-06-21 18:21:23

#15 jake

278086346 发表于 2016-6-21 18:21
OK,谢谢,那个类是存在的。并且类里面的表是写的远程库的表信息。
但是他会提示:Fatal error: Call to  ...
这个提示应该是你的ry_shichang类没有继承spModel导致找不到findAll

2016-06-21 18:25:21

#16 278086346

jake 发表于 2016-6-21 18:25
这个提示应该是你的ry_shichang类没有继承spModel导致找不到findAll
$dsn_mysql = spClass('ry_shichang',array(array(  
                'host' => '', // 数据库地址
                'port' => 3306,        // 端口
                'login' => 'root',     // 用户名
                'password' => '',      // 密码
                'database' => 'erp',      // 库名称
        ))
, SP_PATH.'SpeedPHP/Drivers/mysql.php', TRUE);
$dsn_mysql->_db = $dsn_mysql;
$list=$this->list=$dsn_mysql->findAll();
我改成这样,他又报错是这个。
我现在也是spclass一个远程信息,然后FINDALL,应该没错误的。
$dsn_mysql->_db = $dsn_mysql; 这句话是把_db切换成$dsn_mysql我新定义的数据库配置吧
逻辑应该没错的
Fatal error: Call to undefined method stdClass::findAll()

2016-06-21 18:33:51

#17 jake

ry_shichang这个类要像其他model类一样,继承于spModel

class ry_shichang extends spModel

2016-06-22 08:50:45

#18 278086346

jake 发表于 2016-6-22 08:50
ry_shichang这个类要像其他model类一样,继承于spModel

class ry_shichang extends spModel ...
QQ截图20160622094939.jpg
是的,这个类也是继承了spModel
里面的主键和表名都是远程的那个。

还是报错呢。。。都不知道问题出在哪里,请问还有其他办法,哪怕复杂点都行,可以解决这个读取数据库问题吗?程序都是SPEEDPHP开发的,只是数据库不同

2016-06-22 09:49:36

#19 jake

278086346 发表于 2016-6-22 09:49
是的,这个类也是继承了spModel
里面的主键和表名都是远程的那个。
被绕晕了,看清楚手册 http://www.speedphp.com/thread-3794-1-1.html
继承spModel的是你要findAll的类,而_db才是dsn那个类~~~
按照手册的是$g = spClass('m_guestbook');的m_guestbooke才用来findAll的

不然把手册代码复制出来仔细看看?

2016-06-22 10:01:56

#20 278086346

jake 发表于 2016-6-22 10:01
这个类在远程吗?需要在本地才行哦
在本地的,对应的远程库的信息。
但是现在报错,是不能用FINDALL的,我想一步一步怎么进行测试?现在看起来都没问题,只能一点一点测试。
   这个框架怎么检查数据库是否通的。   或者除了FINDALL这个方法,还有可以不用继承就能使用的

2016-06-22 10:06:40

#21 jake

看清楚手册 http://www.speedphp.com/thread-3794-1-1.html
继承spModel的是你要findAll的类,而_db才是dsn那个类~~~
按照手册的是$g = spClass('m_guestbook');的m_guestbooke才用来findAll的

不然把手册代码复制出来仔细看看?

2016-06-22 10:07:45

#22 278086346

jake 发表于 2016-6-22 10:01
被绕晕了,看清楚手册 http://www.speedphp.com/thread-3794-1-1.html
继承spModel的是你要findAll的类, ...
$ry_shichang = spClass('ry_shichang',array(array(  
       'host'=>'',
      'login'=>'root',
      'password'=>'',
      'database'=>'erp'
        ))
, SP_PATH.'SpeedPHP/Drivers/mysql.php', TRUE);
$ry_shichang->_db = $ry_shichang;
$list=$this->list=$ry_shichang->findAll();dump ($list);
我的确是ry_shichang 类是要findAll的,并且下面_db也是这个。  应该和手册的一样的。
   呵呵,我在研究下吧,把你绕晕了,你就没办法做事了。

2016-06-22 10:09:21

#23 jake

278086346 发表于 2016-6-22 10:09
我的确是ry_shichang 类是要findAll的,并且下面_db也是这个。  应该和手册的一样的。
   呵 ...
手册的:

$dsn_mssql = spClass('db_mssql',

$g = spClass('m_guestbook');

$g->_db = $dsn_mssql;

然后是

$g->findAll()

这里有两个对象,$dsn_mssql和$g

$dsn_mssql是赋值给$g->_db

$g是用来查询的

你现在这两个是一个了,还没看出来吗?

2016-06-22 10:12:30

#24 jake

你照这样写就没错了,红的部分别改!!!!!!!

$ry_shichang = spClass("ry_shichang");

$dbdbdb = spClass('db_mysql',array(array(  
       'host'=>'',
      'login'=>'root',
      'password'=>'',
      'database'=>'erp'
        ))
, SP_PATH.'SpeedPHP/Drivers/mysql.php', TRUE);


$ry_shichang->_db = $dbdbdb;

$ry_shichang->findAll();

dump ($list);

2016-06-22 10:14:57

#25 278086346

jake 发表于 2016-6-22 10:12
手册的:

$dsn_mssql = spClass('db_mssql',
按照你这个调整了下,报错是:不报错findall 了,是说在本地的库名,找不到远程的表名。。。   还是回到最初的错误了
SELECT * FROM ry_xiangmu ORDER BY v_id
执行错误: Table '2012zzcms.ry_xiangmu' doesn't exist

2016-06-22 10:15:39

#26 jake

278086346 发表于 2016-6-22 10:15
按照你这个调整了下,报错是:不报错findall 了,是说在本地的库名,找不到远程的表名。。。   还是回到 ...
简化一下,还是红的位置别改!!!!

$ry_shichang = spClass("ry_shichang");

$ry_shichang->_db = spClass('db_mysql',array(array(  
       'host'=>'',
      'login'=>'root',
      'password'=>'',
      'database'=>'erp'
        ))
, SP_PATH.'SpeedPHP/Drivers/mysql.php', TRUE);

$list = $ry_shichang->findAll();

dump ($list);

2016-06-22 10:17:58

#27 278086346

jake 发表于 2016-6-22 10:14
你照这样写就没错了,红的部分别改!!!!!!!

$ry_shichang = spClass("ry_shichang");
Fatal error: Call to a member function getArray() on a non-object in D:\WWW\zzcms\SpeedPHP\Core\spModel.php on line 103
有出来 一个新的报错。。 现在是在spModel里面报错了

2016-06-22 10:18:05

#28 jake

278086346 发表于 2016-6-22 10:18
有出来 一个新的报错。。 现在是在spModel里面报错了
说了红的部分别改~~~~~是不是没注意db_mysql那个红色的~~~

2016-06-22 10:23:01

#29 278086346

jake 发表于 2016-6-22 10:23
说了红的部分别改~~~~~是不是没注意db_mysql那个红色的~~~
$ry_shichang = spClass("ry_shichang");

$dbdbdb = spClass('db_mysql',array(array(  
       'host'=>'',
      'login'=>'root',
      'password'=>'',
      'database'=>'erp'
        ))
, SP_PATH.'SpeedPHP/Drivers/mysql.php', TRUE);
$ry_shichang->_db = $dbdbdb;
$list = $ry_shichang->findAll();dump ($list);


按您给出的弄的。没有修改其他的,只是把配置换成自己的。其他的一模一样,现在是SpeedPHP\Core\spModel.php on line 103报错,这个文件报错了

2016-06-22 10:25:14

#30 jake

db_mysql 改成 db_mysql 吧~~

2016-06-22 10:28:25

#31 278086346

jake 发表于 2016-6-22 10:28
把 db_mysql 改成 db_mysql 吧~~
这个是db_mysql  只是这个论坛编辑器,自动加了颜色代码。
    现在也都是按您说的做了,还是报错了。。。

2016-06-22 10:29:59

#32 jake

另外findAll之前,dump一下 $ry_shichang->_db 出来看看是什么

2016-06-22 10:30:12

#33 278086346

jake 发表于 2016-6-22 10:30
另外findAll之前,dump一下 $ry_shichang->_db 出来看看是什么
是个空的。。。没有任何提示

2016-06-22 10:38:42

#34 278086346

jake 发表于 2016-6-22 10:30
另外findAll之前,dump一下 $ry_shichang->_db 出来看看是什么
我现在用最传统的PHP试试
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

// some code
也会说链接不上,这个框架里面在function写这个,应该可以的吧

2016-06-22 10:51:35

#35 jake

这里直接写个多库切换的例子给你参考吧,在我这里是链接到两个库并且没有问题的。

http://www.speedphp.com/forum.php?mod=redirect&goto=findpost&ptid=3794&pid=21922&fromuid=1

2016-06-22 10:57:16

#36 278086346

jake 发表于 2016-6-22 10:57
这里直接写个多库切换的例子给你参考吧,在我这里是链接到两个库并且没有问题的。

http://www.speedphp.co ...
非常感谢,我研究下

2016-06-22 11:00:01