linux 登陆sybase_Windows和Linux下连接Sybase数据库的一点小区别_weixin_29179583的博客-程序员宅基地

技术标签: linux 登陆sybase  

首先说明一下我的应用环境,免得误会:

服务器:win2000、sybase 11.92(cp936字符集)、apache2、php5。

开发环境:ubuntu linux、apache2、php5,数据库直接连接服务器。

以前使用winxp的时候,在php中连接sybase数据库非常方便,再加上使用adodb类库,就更爽了,唯一的一点麻烦就是由于cp936不是sybase 11.92标准的字符集,是硬从sybase 12里面套过来的,所以在连接数据库,执行connect方法的时候也许会有一个warning警告,不过不影响使用,在connect前面加上@屏蔽掉即可(注意,这也是我在遇到本文所述问题时,花了很大时间都找不到问题的直接原因,罪过啊)。

但是,在系统切换到ubuntu下之后,突然发现一个连接sybase数据库的php程序不能用了,错误信息为:

[17-Jun-2006 01:35:48] PHP Fatal error: Uncaught exception ‘ADODB_Exception’ with message ‘sybase error: [0: ] in EXECUTE(“select count(1) as c from icktz where datepart(yy, blrq) = 2006 and blxz like “�°�%””)

‘ in /media/hdd5/php_includes/adodb/adodb-exceptions.inc.php:76

Stack trace:

#0 /media/hdd5/php_includes/adodb/adodb.inc.php(879): adodb_throw(‘sybase’, ‘EXECUTE’, 0, ”, ‘select count(1)…’, false, Object(ADODB_sybase))

#1 /media/hdd5/php_includes/adodb/adodb.inc.php(854): ADOConnection->_Execute(‘select count(1)…’, false)

#2 /media/hdd6/websoft/fwolfweb/tools/work_stat/work_stat.php(396): ADOConnection->Execute(‘select count(1)…’)

#3 /media/hdd6/websoft/fwolfweb/tools/work_stat/work_stat.php(659): WorkStat->Rsql(‘select count(1)…’, ‘jygl’)

#4 /media/hdd6/websoft/fwolfweb/tools/work_stat/work_stat.php(241): WorkStat->StatXysc()

#5 /media/hdd6/websoft/fwolfweb/tools/work_stat/index.php(32): WorkStat->GenerateCache()

#6 {main}

thrown in /media/hdd5/php_includes/adodb/adodb-exceptions.inc.php on line 76

注意其中有一处为乱码“�°�%”,于是怀疑是编码的问题。这个程序中涉及到编码和字符集的地方,是由于php源码使用的都是utf8编码,而sybase使用cp936编码,所以执行sql的时候要转换为gbk,执行结果要显示的时候又要转换为utf8编码。但是反复检查、增删编码处理部分,除了错误信息由乱码变为正常汉字之外,没有任何进展。

没办法,重新写一段最简单的数据库连接程序测试一下:

< ?php

require_once('adodb/adodb.inc.php');

$db = &ADONewConnection('sybase');

$db->Connect(‘server3’, ‘sa’, ”, ‘dbname’);

$rs = $db->Execute(‘select 1’);

?>

运行错误如下:

Warning: sybase_connect(): Sybase: Unable to connect in /media/hdd5/php_includes/adodb/drivers/adodb-sybase.inc.php on line 126

这才恍然大悟,原来根本就没有连接上数据库,自然在执行sql的时候出错。要问刚才为什么没有发现,我不是加上@屏蔽了错误信息嘛。继续分析,上面这段代码原来在winxp客户端调试的时候是绝对能够连上服务器的,怎么在linux下就不行呢,又将服务器名更换为ip地址:端口,就成功了。

可能是由于linux下没有netbios(正如linux无法使用“ping 机器名”命令一样),还可能是linux下没有安装sybase open client,设置dsedit,总之,在linux下连接sybase服务器,只能使用“机器名:端口号”作为hostname,无法直接使用主机名。

于是,在程序中增加一部分字段判断主机操作系统,对hostname进行赋值的语句,问题顺利解决:

if (‘/’ == $_SERVER[“SCRIPT_FILENAME”]{0})

$host_srv = ‘192.168.0.1:5000’;

else

$host_srv = ‘server3’;

$server[0][‘dbtype’] = ‘sybase’;

$server[0][‘host’] = $host_srv;

……

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_29179583/article/details/112867223

智能推荐

CSR公布蓝牙“大杀器” CSR Mesh技术细节,号称要“干掉Zigbee”_djyos的博客-程序员宅基地

原文链接:http://www.eetrend.com/interview/100051279 作者 张国斌“CSR Mesh技术由CSR剑桥大学研发团队打造,利用星型网络和中继技术,每个网络可以连接超过65000个节点,网络和网络还可以互连,最终可将无数Bluetooth Smart设备通过同一手机、平板电脑或PC进行互联或直接操控。为业内首创。它的出现就是为了干掉Z

Struts2中OGNL表达式的用法_a846075506的博客-程序员宅基地

今天分享的是Struts2框架中的一种ognl表达式语言,主要分两个目标去学习    1.理解struts2传值的优先级    2.ognl与el的区别一:ognl表达式语言简介  OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性...

如何打造一个高并发,处理海量数据,高性能,易扩展,可伸缩,高可用的网站?_emilier123的博客-程序员宅基地_易扩展 高可用

简而言之,采用分布式系统,分布式应用和服务,分布式数据和存储,分布式静态资源,分布式计算,分布式配置和分布式锁。负载均衡,故障转移,实现高并发。高可用:主要是利用冗余数据的原理,应用和服务器部署在多台机器上,数据存储部署在多台机器上,在多台机器上利用mysql的主从分离实现多态服务器数据相互备份,万一有一台服务器宕机,直接转移另外一台数据服务器上读取数据。也不会导致数据丢失。对于应

LOG_ARCHIVE_DEST_STATE_n=alternate_weixin_34327761的博客-程序员宅基地

LOG_ARCHIVE_DEST_STATE_nPropertyDescriptionParameter typeStringSyntaxLOG_ARCHIVE_DEST_STATE_[1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |...

python编程基础8-元组_x.Jessica的博客-程序员宅基地_python元组初始化

元组看起来犹如列表,但元组使用圆括号()而不是[]来标识,而且列表的元素可以修改,但元组的元素不能修改。1.元组与列表元组与列表很相似,两者之间的差别在于:列表在初始化后其中的元素还可以进行增删改等操作,但是元组在初始化后其中的元素不能进行更改;列表在赋值时使用方括号[],而元组在赋值时使用小括号()。因为元组具有不可变的特性,所以在能用元组替代列表的地方最好都使用元组,这样代码更安全。2.创建元组元组创建很简单,只需要在括号()中添加元素,元素之间用逗号隔开。元组中只包含单个元素时,需要在该

随便推点

android权限大全_陌恋殇雪的博客-程序员宅基地

android权限类别转自https://www.cnblogs.com/diyishijian/p/5629545.html1.android.permission.WRITE_USER_DICTIONARY  允许应用程序向用户词典中写入新词2.android.permission.WRITE_SYNC_SETTINGS  写入Google在线同步设置3.android.permissi...

mysql pxc_MySQL之PXC集群搭建_weixin_42316319的博客-程序员宅基地

一、PXC 介绍1.1 PXC 简介PXC 是一套 MySQL 高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美...

TAE的简介及功能_听说唐僧不吃肉的博客-程序员宅基地

一、TAE简介TAE2.0(Taobao App Engine)是针对移动互联网场景的定制化PaaS云服务,基于阿里云基础设施,采用Docker容器技术封装应用运行环境,并且针对互联网应用提供系统构建、发布、持续集成、运维管理的一站式解决方案,让中小团队也具备了轻松服务海量用户的能力。二、功能简介1、系统构建能力(Build)TAE拥有丰富的镜像资源,例如Java、PHP、MySQL、Zookeeper等镜像;开发者可以利用官方镜像,快速搭建系统,完成在TAE2.0上的架构搭建;如果官方镜像无法

PAT (Basic Level) Practice (中文)1080 MOOC期终成绩 (25 分)_AnthonyZhangZJU的博客-程序员宅基地

PAT (Basic Level) Practice (中文)1080 MOOC期终成绩 (25 分)题目描述对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分(满分100)。总评成绩的计算公式为 G=(Gmid−term​×40%+Gfinal​×60%)G = (G_{mid−term}​ ×40\% + G_{final}​ ×60\%)G=(Gmid

2.1 目标检测简介_dfsj66011的博客-程序员宅基地

目录2.1 目标检测简介[^1]2.1.1 传统的目标检测方法2.1.2 深度学习时代的目标检测2.1 目标检测简介1目标检测是另一项非常重要的计算机视觉任务,图像分类的目的是辨别图片中所包含的主体对象是什么,而目标检测的目标是检测图像中某对象的位置所在。简单的说,图像分类任务解决的是 What 问题,而目标检测的任务是 What + Where,这是一项非常基础且具有很大挑战性的计算机视觉...

【java+selenium3】自动化基础小结+selenium原理揭秘 (十七)_a6596250的博客-程序员宅基地

一、自动化实现原理  1.创建驱动对象  (1)首先加载浏览器安装目录下的exe文件 (2) 其次是加载可执行驱动的exe文件,监听等待客户端发送的web service请求.底层原理如下:  1.在自动化测试过程中,存在三部分组件:客户端脚本+驱动+浏览器终端。  2.驱动文件,以geckodriver.exe为例,这个可执行的驱动文件...