问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

iis配置php环境连接sqlserver2008数据库报错Fatal error: Call to undefined function mssql_connect()

发布网友 发布时间:2022-04-08 07:19

我来回答

3个回答

懂视网 时间:2022-04-08 11:41

Nginx版本:nginx1.8.0

php版本:php5.5.28

Sqlserver:2008

 

关于Linux环境安装Nginx+PHP参考《Linux环境Nginx安装与调试以及PHP安装 》即可。

 

一般来说,PHP+mysql是最经典的组合,跑在Linux环境是非常好的,如果是PHP+Sqlserver是跑在windows环境下的。

今天需要Linux环境下PHP调用Sqlserver,用了一天的时间,终于把这个问题彻底研究清楚,网上其他类似文章我大都看了,其实有的是因为太久远不适用,有的有错误,还有的有几个关键问题没有说清楚,看此文其他可以忽略了,说真的踩坑真的很累,也没必要,照着这篇来做就是,所以本文才号称是全网最经典无错版,其实这么说主要是希望大家节省时间。

1.首先需要编译安装FreeTDS

说明:FreeTDS官网下载比较慢,可以从本人上传的这里一样很快下载:http://download.csdn.net/detail/21aspnet/8997397

# wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-patched.tar.gz
# tar -zxvf freetds-0.91.tar.gz
# cd freetds-0.91

需要注意的就是这里的--with-tdsver=7.1,这个非常重要,网上有的说是7.2,有的说是8.0,关于这个的问题可以看文末参考帖子。


# ./configure --prefix=/usr/local/freetds --with-tdsver=7.1 --enable-msdblib
# make && make install

 

安装好会看到这样的信息:

技术分享

 

配置FreeTDS

# cd ../

# echo "/usr/local/freetds/lib/" > /etc/ld.so.conf.d/freetds.conf
# ldconfig

 

验证FreeTDS

这一步非常重要,通过才可以继续,不然后面的步骤都是无意义的。

首先看看版本信息

# /usr/local/freetds/bin/tsql -C

技术分享

如果前面配置的时候--with-tdsver=7.1如果写的是7.2和8.0或者其他都会这里TDS版本是5.0,原因见后面的参考信息中的帖子。

 

# /usr/local/freetds/bin/tsql -H 数据库服务器IP:XXX -p 1433 -U 用户名 -P 密码

或者直接

# /usr/local/freetds/bin/tsql -H 数据库服务器IP  -p 1433 -U 用户名 -P 密码

技术分享

 

关于freetds/etc/freetds.conf

重要说明:很多其他帖子写了需要配置/usr/local/freetds/etc/freetds.conf,另外需要注意的是etc下的freetds.conf不同于前面那个freetds.conf。

其实默认已经生成好了etc下的freetds.conf,其实这是多余的,不过配置了也没有问题。

 

如果配置了这里,那么PHP页面就可以使用这里的配置,不然PHP页面指定一样可以。

默认是这样的:

[global]
 # TDS protocol version
;	tds version = 4.2

	# Whether to write a TDSDUMP file for diagnostic purposes
	# (setting this to /tmp is insecure on a multi-user system)
;	dump file = /tmp/freetds.log
;	debug flags = 0xffff

	# Command and connection timeouts
;	timeout = 10
;	connect timeout = 10
	
	# If you get out-of-memory errors, it may mean that your client
	# is trying to allocate a huge buffer for a TEXT field. 
	# Try setting ‘text size‘ to a more reasonable limit 
	text size = 64512

# A typical Sybase server
[egServer50]
	host = symachine.domain.com
	port = 5000
	tds version = 5.0

# A typical Microsoft server
[egServer70]
	host = ntmachine.domain.com
	port = 1433
	tds version = 7.0


修改[egServer70]为这样:

[egServer70]
	host = 192.168.1.235 这个是数据库服务器IP
	port = 1433
	tds version = 7.1

其他都不用动,关于[egServer70]的名字也是随意的,这个就是给PHP调用的,一致即可。

 

3.添加PHP扩展mssql和pdo的pdo_dblib

说明:这2种扩展都可以达到相同的目的,选其一即可。

(1).增加PHP扩展mssql

# cd /usr/php-5.5.28/ext/mssql/
linux下用phpize给PHP动态添加扩展
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds/
# make && make install

技术分享


(2).增加PHP扩展pdo的pdo_dblib
# cd /usr/php-5.5.28/ext/pdo_dblib/
linux下用phpize给PHP动态添加扩展
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-dblib=/usr/local/freetds/
# make && make install

 

(3).在php.ini配置文件中增加.so
# cd /usr/local/php/lib下的php.ini

增加:

extension = "mssql.so"
extension ="pdo_dblib.so"


如果你只需要上述2种扩展之一,自然只要新增其中一个的.so扩展到php.ini即可。

(4).重启PHP FastCGI

# killall php-fpm
# /etc/init.d/php-fpm

 

如果没有正确生成扩展是不能重启php-fpm的。

这时候在phpinfo里就可以看到扩展添加成功的信息了。

技术分享

技术分享

4.使用PHP调用SQLserver

(1).mssql_connect配置版

<?php
header("Content-type: text/html; charset=utf-8");
$msdb=mssql_connect("egServer70","blog.csdn.net.unix21","password");
if (!$msdb) {
	echo "connect sqlserver error";
	exit;
	}
mssql_select_db("数据库名",$msdb);
$result = mssql_query("SELECT top 5 * FROM tablename", $msdb);
while($row = mssql_fetch_array($result)) {
 print_r($row);
}
mssql_free_result($result);
?>

注意:上面的egServer70就是前面freetds/etc/freetds.conf配置的。

 

(2).mssql_connect非配置版

<?php
header("Content-type: text/html; charset=utf-8");
//$msdb=mssql_connect("数据库IP","blog.csdn.net.unix21","password");
//$msdb=mssql_connect("数据库IP:1433","blog.csdn.net.unix21","password");
$msdb=mssql_connect("数据库IP:49151","blog.csdn.net.unix21","password");
if (!$msdb) {
	echo "connect sqlserver error";
	exit;
	}
mssql_select_db("数据库名",$msdb);
$result = mssql_query("SELECT top 5 * FROM tablename", $msdb);
while($row = mssql_fetch_array($result)) {
 print_r($row);
}
mssql_free_result($result);
?>


(3).PDO版本

<?php
header("Content-type: text/html; charset=utf-8");
 try {
 $hostname = "数据库IP";
 $port = 1433;
 $dbname = "数据库名";
 $username = "blog.csdn.net.unix21";
 $pw = "password";
 $dbh = new PDO ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
 } catch (PDOException $e) {
 echo "Failed to get DB handle: " . $e->getMessage() . "
";
 exit;
 }
 
 $stmt = $dbh->prepare("SELECT top 5 * FROM tablename");
 $stmt->execute();
 while ($row = $stmt->fetch()) {
 print_r($row);
 }
 unset($dbh); unset($stmt);

?>

 

显示数据:
技术分享

以上本人都是验证过的。

 

 

参考信息:

1.这个帖子解释了第一个重要问题为什么是--with-tdsver=7.1

http://blog.csdn.net/dlutxie/article/details/6851429

2.官方信息

http://php.net/manual/zh/ref.pdo-dblib.php

http://php.net/manual/zh/function.mssql-connect.php

3.本人之前也是参考这些的,但是有些地方有错误,网上主要也就这些帖子,其他都是互相引用的。

http://zyan.cc/php_sqlserver_freetds/

http://my.oschina.net/robanlee/blog/168626?p={{currentPage+1}}

http://blog.csdn.net/rgb_rgb/article/details/8762769

http://blog.sina.com.cn/s/blog_87b9bbc70101avmh.html

http://stackoverflow.com/questions/13180746/mssql-connect-unable-to-connect-to-server-without-freetds-conf

http://blog.csdn.net/chenjiebin/article/details/7278304
http://blog.163.com/koumm@126/blog/static/9540383720112157055119/
http://www.linuxidc.com/Linux/2012-09/70192.htm
http://blog.csdn.net/helonsy/article/details/7207497

http://my.oschina.net/u/217063/blog/220337

版权声明:本文为博主原创文章,未经博主允许不得转载。

Linux环境PHP5.5以上连接SqlServer2008【全网最经典无错版】

标签:

热心网友 时间:2022-04-08 08:49

安装phpstudy,正好支持iis还支持sql2008。正好满足你的要求。安装phpstudy后切换iis+php5.3/5.4。在菜单php扩展里勾上sqlsrv就行了。

热心网友 时间:2022-04-08 10:07

mssql_connect() 这个函数在php5.3以上版本已经不支持了,建议采用微软提供的工具。详见http://hi.baidu.com/michaelzhouh/item/f9892f84304350cfef083d89
...Fatal error: Call to undefined function mysql_connect()

你的配置环境中没有加载php_mysql.dll模块!首先输出phpinfo(),查看php.ini的文件路径,然后打开php.ini文件,查找php_mysql,将前面的';'去掉,重启动apache则可!

php连接数据库sqlserver2000是报错 Fatal error: Call to undefined...

第一,可能是sqlserver的服务没启动,你右击“我的电脑”-》管理-》服务和应用程序-》服务-》sqlserver(mssqlserver)以及相应的服务启动,并设置为“自动(延迟启动)”,这样开机就自己延迟启动了!第二,安装sqlsrv进行相关配置,不然的话是连接不上的!

...Fatal error: Call to undefined function mysql_connect() in_百度...

php配置iis7的方式有两种,ispi和cgi,但是php5.3已经不支持ispi了,只支持cgi,而采用php5.2配置iis7的时候会出现 找不到mysql数据库不能用,是因为dll文件没有加载,单击php-cgi.exe,把确少的dll复制到system下,把php.ini复制到 windows目录下,重启服务器,就好了。

Fatal error: Call to undefined function info() in D:\web\phpinfo...

这句话的意思是说,你调用了一个没有定义的函数info(),并且这个函数是在phpinfo()文件下的,找找这个文件中有没有这个函数。我看你的意思是要测试php的运行环境是否已经安装好了,如果我没猜错的话,你大概是函数用错了,不应该是info(),应该是phpinfo()这个函数,是php的内置函数,能以网页的形式...

...Fatal error: Call to undefined function mysql_connect() in_百度...

&lt;?php phpinfo();?&gt; 利用它查看 能否 链接 mysql,这个是一个大项,你可以用 phpinfo 显示的 支持内容,查找 mysql ,能找到的话,就可以连接,不能找到,就请重新检测 php.ini 配置文件 配置php.ini需要重启iis或者apache才能生效!

...报错Fatal error:Call to undefined function curl_init()_百度...

1. 找到c:\php\php.ini文件 搜索到extension=php_curl.dll 后把前面的分号去掉 2. 在c:\php文件夹下找到 php_curl.dll、php5ts.dll、libeay32.dll、ssleay32.dll四个文件 ,将它们复制到c:\windows\system32下,重启IIS服务即可。

PHP Fatal error: Call to undefined function Home\Controller\sqlsrv...

原因为SQLSRV模块不存在。请检查该模块是否被正确安装。

...Fatal error: Call to undefined function mysql_connect() in_百度...

打开php.ini,搜索 "extension_dir" 改为extension_dir= "你的php目录下的ext目录地址" ext目录下放的都是php的扩展,你不需要把php_mysql.dll copy到system32 下.改一下这个扩展地址就行了。然后重起iis/apache,如果你用的iis ,必须在运行中输入iisreset的方式重起iis,否则不起作用的。这里有...

...Fatal error: Call to undefined function mysql_connect()

先用phpinfo();看一下是否支持mysql。要是没有,还是配置有问题。Loaded Configuration File 看看php.ini是读哪个路径下的 php.ini 里extension = php_mysql.dll前的分号已经去掉了,extension_dir = "X:/php/ext"也改为了自己ext文件夹的路径,libmysql.dll和php5ts.dll也复制到Windows目录下的...

怎么配置apache连接sqlserver

2.SQL Server Authentication连接 ?&lt;?php serverName = "localhost"; //数据库服务器地址 uid = "sa"; //数据库用户名 pwd = "123"; //数据库密码 connectionInfo = array("UID"=&gt;$uid, "PWD"=&gt;$pwd, "Database"=&gt;"cart");conn = sqlsrv_connect( $serverName, $connectionInfo);if...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
手势密码在哪里设置? 电脑和显示器用vga连接,但显示器一开电显示dvi无信号,然后黑屏,主机过来... 关于机器人的电影有哪些,最近看了好多短片,关于机器人的。好像是好莱坞... 我喜欢看机器人丶外星人(爱情,战争,动作)类的电影,你有介绍吗?越多越好... 距离广州东站最近的民生银行 ...空调和冰箱电容是起启动做用的吗?3、线路版上面的电容一般,什么情况... 怎么知道ThinkPad电脑是真是假? 写一篇“A Nice day”的日记,40~60个字.(英语) 写出一篇英语日记 内容是一个初中生的一天 初二 字数不限不少于40字 配豆浆稀饭的,除了油条,还有软糯Q弹的南瓜麻圆怎么做出来? 大众途安一档很难挂是否可以调? 大众途安保养归零怎么弄啊 修复15车龄的途安 大众途安怎么调可以显示续驶里程 大众途安车的里程表怎么能调快点!可以吗 大众途安1.8T仪表上的两个旋钮是做什么用的 白板笔如何拔后塞 医保交满15年后怎么办 怎么用qq查看 怎么查qq与哪个绑定 医保交15年后可终身享受吗 联想键盘如何取消FN键? 用手机QQ能搜到吗? 如何查看qq绑定的 联想笔记本电脑键盘fn怎么关闭 怎么用qq看注册的 和新密码怎么申请 怎样查QQ绑定的呢?? 怎么在QQ号上查看绑定的 如何申请和密码 腾讯视频会员怎么更改 怎么把腾讯视频绑定的换掉 腾讯视频怎么更换登录 买了一个乳胶枕,用了一晚上起红疙瘩 乳胶枕头上面长小坨坨怎么办 乳胶枕买回来没有马上拆开,放了很久后拆开为什么会变成颗粒状? 购买的泰国乳胶枕有黑色点点,店家说是包装过程中沾到了其他东西,大家看看是什么? 我看好多人都在用乳胶枕,想知道用乳胶枕有什么好处? 如何有效地教学《汉语拼音字母表》 如何让孩子快速记住汉语拼音字母表? 太极二十四式的手势急其名称 小学汉语拼音字母表的教学方法 演讲常用手势有哪些?大神们帮帮忙 24式,42式和48式太极拳云手的手势,高度,云法是否都一样? 这个手势在篮球中是什么意思? 作战常用手势 华为手机怎么设置24 nba中3秒,8秒和24秒违例手势怎么比?裁判是怎样向记录台表示球员号码的?交换场地的手势怎么比? 篮球中那些动作是犯规的 那些犯规的手势怎么表示 怎么样洗黑色的布鞋不掉色
  • 焦点

最新推荐

猜你喜欢

热门推荐