如果读取远程数据库信息
发布于:2022-01-17 09:50:54
#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
抱歉。刚才没有仔细看还有一个array
请问写完这个之后,我需要如何操作那个初始化类的问题? 因为没有model ,这样如何写呢
2016-06-21 15:53:59
#5 jake
新建个model类,写好里面的表名,用法跟model一样。
更换db链接只是底层改了指向,上层还是用model。
2016-06-21 16:04:41
#6 278086346
明白原理了,我去操作试试,谢谢您的耐心指导
2016-06-21 16:06:21
#7 278086346
执行错误: 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
好的,我在试试,会一直期待您的新版本。
从2011年到现在,一直用这个程序在做开发,语法还是很简单。期望越来越好
2016-06-21 16:31:05
#10 jake
新版已经发布几个月了。。。但是和3.1版不兼容。
2016-06-21 17:19:32
#11 278086346
$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
晕,把配置也写进去了,能帮我删除那个信息吗?
2016-06-21 17:40:46
#13 jake
上面代码帮你删除信息了,应该没写错吧,ry_shichang类存在就行。
新版和3.1版是不兼容的,不兼容,所以不能替换。新版建议在新的项目上用,3.1版保持,会持续更新的。
2016-06-21 18:15:12
#14 278086346
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
这个提示应该是你的
ry_shichang类没有继承spModel导致找不到findAll
2016-06-21 18:25:21
#16 278086346
$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
是的,这个类也是继承了spModel
里面的主键和表名都是远程的那个。
还是报错呢。。。都不知道问题出在哪里,请问还有其他办法,哪怕复杂点都行,可以解决这个读取数据库问题吗?程序都是SPEEDPHP开发的,只是数据库不同
2016-06-22 09:49:36
#19 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:01:56
#20 278086346
在本地的,对应的远程库的信息。
但是现在报错,是不能用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
$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
手册的:
$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
按照你这个调整了下,报错是:不报错findall 了,是说在本地的库名,找不到远程的表名。。。 还是回到最初的错误了
SELECT * FROM ry_xiangmu ORDER BY v_id
执行错误: Table '2012zzcms.ry_xiangmu' doesn't exist
2016-06-22 10:15:39
#26 jake
简化一下,还是红的位置别改!!!!
$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
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
说了红的部分别改~~~~~是不是没注意db_mysql那个红色的~~~
2016-06-22 10:23:01
#29 278086346
$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
这个是
db_mysql 只是这个论坛编辑器,自动加了颜色代码。 现在也都是按您说的做了,还是报错了。。。
2016-06-22 10:29:59
#32 jake
另外findAll之前,dump一下 $ry_shichang->_db 出来看看是什么
2016-06-22 10:30:12
#33 278086346
是个空的。。。没有任何提示
2016-06-22 10:38:42
#34 278086346
我现在用最传统的PHP试试
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// some code
也会说链接不上,这个框架里面在function写这个,应该可以的吧
2016-06-22 10:51:35
#36 278086346
非常感谢,我研究下
2016-06-22 11:00:01