王朝网络
分享
 
 
 

解决PHP问题:Fatal error: Call to undefined function: mysql_connect()

王朝mysql·作者佚名  2006-01-09
宽屏版  字体: |||超大  

【问题来源】

近日新装一台RHEL AS3 的服务器;在安装的时候,没有选择安装数据库(MYSQL)相关的包。由于RHELAE3自带的MYSQL是3.23版本的,我想安装的时候,当MOUNT光驱的时候整个系统就死掉键盘鼠标毫无反应远程登录不入,所以我干脆就直接安装MYSQL4.1。问题也许就在此引发了。

RHEL AS3 自带APACHE2和PHP4.3.2。当我把 [MySQL-server-4.1.7-0.i386.rpm]安装好之后,试图安装[MolyX]论坛时,发现执行数据库连接时发生致命错误:

Fatal error: Call to undefined function: mysql_connect()

这个问题真是够致命的。

经过在 httpd.conf ,php.ini 和 my.cnf 这几个配置文件多方修改测试,问题依然。

之后到 [google] 搜啊搜,找到很多相关的解决方案。

----------------------------------------------

说法[1] :这个问题概括起来说就是你的PHP不支持mysql_connect()函数。为什么呢?这是由于PHP是一种模块化的设计,除了核心的内容,其他都是可选的。之所以不支持,是因为在编译PHP时没有加入对MYSQL数据库的支持。

说法[2] :

- 如果你的操作系统是Linux/Unix

1.如果PHP是自己编译的,那么要重新做。在configure后面加上--with-mysql选项

2.如果是用的RPM,建议到网上去找找已经内置MYSQL支持的RPM包,重新装上去

说法[3]:因为卸载了以前的mysql,重装的mysql又不是rpm装的

所有安装后的路径不同了;但是在原先装apache的时候需要./configure \

--prefix=/usr/local/php \

--with-mysql=/usr/local/mysql \ (主要是这句)

用来指定mysql的安装路径

所以在重装了之后因为路径不一样,apache就无法找到mysql的安装路径

也就出现了mysql_connect:未被定义的错误

----------------------------------------------------------------

头痛的是我的 phpinfo() 打出来的信息均是正常的。在RHEL光盘上找了很多PHP、MYSQL相关的LIB/DBI/ODBC等包都装了,问题还是没解决。

后来在MYSQL的论坛上看到可以使用 dl('mysql.so') 来动态装载模块。于是做了一个测试的PHP文件:

----------------------------------------

<?

#test.php

echo "php version=";

echo phpversion();

echo "<br>";

dl('mysql.so');

require "inc.php";

test();

echo "<br>";

dbconnect();

?>

----------------------------------------

<?

# cat inc.php

function test(){

echo "function test output";

}

function dbconnect(){

mysql_connect("localhost","root","password");

}

?>

----------------------------------------

结果错误信息如下:

----------------------------------------

php version=4.3.2

Warning: dl(): Unable to load dynamic library '/usr/lib/php4/mysql.so' - libmysqlclient.so.10: cannot open shared object file: No such file or directory in /usr/www//test.php on line 9

function test output

Fatal error: Call to undefined function: mysql_connect() in /usr/www/inc.php on line 7

----------------------------------------

结果又多了一个线索:libmysqlclient.so.10。原来是这个模块没有装载成功。

然后我在系统 find 一下,发现根本没有这个文件存在。应该是少装了什么东西。

--------------------------------------------

# rpm -ivh /home/dkk/libdbi-dbd-mysql-0.6.5-5.i386.rpm

error: Failed dependencies:

libdbi = 0.6.5-5 is needed by libdbi-dbd-mysql-0.6.5-5

libmysqlclient.so.10 is needed by libdbi-dbd-mysql-0.6.5-5

Suggested resolutions:

libdbi-0.6.5-5.i386.rpm

mysql-3.23.58-1.i386.rpm

--------------------------------------------

在MYSQL.com那个搜索 libmysqlclient.so ,终于找到了问题症结所在:

MYSQL4版本以上,调用libmysqlclient.so 的方式改了,跟MYSQL3.23不一样,而PHP4.3.2和APACHE还是以旧的方式来调用,因此就找不到libmysqlclient.so 了。

英文原文如下:

-------------------------------------------

Ensure that you don't have any MySQL clients that use shared libraries (like the Perl DBD::mysql module). If you do, you should recompile them, because the data structures used in `libmysqlclient.so' have changed. The same applies to other MySQL interfaces as well, such as the Python MySQLdb module.

-------------------------------------------

具体描述见帖子:

http://dev.mysql.com/doc/mysql/en/Upgrading-from-3.23.html

问题找到了,可是我并不想重新编译PHP,尽管5.0都已经出来了。在MYSQL.COM那里有些RPM,我把它们都装了上去,具体如下:

# rpm -ivh MySQL-client-4.1.7-0.i386.rpm

# rpm -ivh MySQL-devel-4.1.7-0.i386.rpm

# rpm -ivh MySQL-shared-4.1.7-0.i386.rpm

# rpm -ivh MySQL-shared-compat-4.1.7-0.i386.rpm

我觉得最重要的是最后一个包(-shared-compat-),因为MYSQL.COM注明了该包包含了3.23的模块;而且,我是安装完上述的一个包就(重启mysql和apache)测试一下那个test.php,直到安装到最后一个包,才发现出现了一个新的“成功的”错误:

Warning: Function registration failed - duplicate name - mysql_connect in /usr/www/test.php on line 9

嘿,这个错误的出现,正说明了系统已经成功装载了 mysql.so ,当test.php的 dl('mysql.so') 尝试重复装载时就触发了该错误。到这里终于可以笑一笑了。

把test.php中的 dl('mysql.so') 注释掉,重新测试。嘿,一个“老错误”跑了出来:

Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client in /usr/www/inc.php on line 7

呵呵,我已经认识它好久啦。只是由于MYSQL4的密码加密方式改变所致。

以root登录到mysql执行语句:update user set password=OLD_PASSWORD('password') where user='root'; 就行啦。

具体描述见以下帖子:

http://dev.mysql.com/doc/mysql/en/Old_client.html

到此,总算可以圆满解决了问题了。嗨,还真费劲,主要原因还是在于自己对于整个系统的东西不甚了解。

如果谁有更好的解决方法,请跟着补充哦。 :-)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有