php简单的数据库连接类程序
代码如下 | 复制代码 |
//8.以array方式显示结果 echo "<br>以array方式显示结果集<br>"; //X.释放 ?>
|
今天使用php操作数据库时发现插入SQL Server 2008数据库里的中文字段出现乱码,下面是我一开始时的一些情况:
开发环境是php5.3.3+Apache2.2.17+SQL Server 2008,php脚本文件的编码是utf-8,传给数据库的编码是GB2312(SQL Server的默认字符编码可能是这个,我不肯定),我用的是微软官方提供的SQLSRV库来连接数据库的(PS:SQL Server 2005开始已经不支持用mssql.dll来连接了),故使用sqlsrv_query($conn, "set names GB2312");语句来设置传给数据库的编码格式的,sql语句这样写了:insert into Opinion (content) values ('aaa中文内容');
运行这条sql语句,发现执行不成功,用sqlsrv_errors()函数来输出错误信息,得到如下结果:
代码如下 | 复制代码 |
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -46 [code] => -46 [2] => An error occurred translating the query string to UTF-16: �ڶ��ֽڵ�Ŀ�����ҳ�У�û�д� Unicode �ַ����ӳ�䵽���ַ� . [message] => An error occurred translating the query string to UTF-16: �ڶ��ֽڵ�Ŀ�����ҳ�У�û�д� Unicode �ַ����ӳ�䵽���ַ� . ) ) |
这是在网页上显示的结果,上面的乱码是原封不动copy下来的。从 “An error occurred translating the query string to UTF-16”可以看出是字符编码转换有问题导致的。于是我使用php的iconv函数来对中文进行强制编码转换,然后执行sql语句,代码如下:
代码如下 | 复制代码 |
$string = iconv('utf-8', 'GB2312//IGNORE', 'aaa中文内容'); $sql = "insert into Opinion (content) values ( $string)"; |
这时候又报错了,错误信息如下:
代码如下 | 复制代码 |
Array ( [0] => Array ( [0] => 42S22 [SQLSTATE] => 42S22 [1] => 207 [code] => 207 [2] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ���� [message] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ���� ) ) |
这个错误信息看不出什么头绪,我又把sql语句输出到网页上看一下是不是sql语句写错了,输出结果如下:
代码如下 | 复制代码 |
insert into Opinion (content) values ( aaa��������) |
咋一看好像没问题,其实是有问题的,注意到后面那个括号里的参数是应该用引号来括起来的(表示它是一个字符串),所以我又修改了sql语句,代码如下:
代码如下 | 复制代码 |
$sql = "insert into Opinion (content) values ( '".$string."')"; 为了看清楚我放大点 |
用单引号把$string括起来,这样之后执行sql语句成功,并且数据库里保存的中文没有乱码。
参考其它的解决办法
若数据库的编码为GB2312,怎样在yii中进行配置才能使得页面的数据显示正常,并且数据库中的数据不能出现乱码:
方法一:
1. yii默认的编码方式是utf-8, 若想改变其编码方式需要在main.php文件中加上'charset'=>'GB2312', 这样才能改变函数的输出的编码方式
2. sql server 2000 的编码方式默认为本地GB2312编码方式, 对数据库进行操作时要注意编码的方式
3. web页面的编码相应的需要变为GB2312
4. 文件保存时需要保存为GB2312编码,这样php文件中的中文字符才能正常解析
方法二:
1. 通过iconv函数对数据进行转码
代码如下 | 复制代码 |
iconv('GB2312','UTF-8',$data) |
出现登陆phpmyadmin出现 #2003 - 服务器没有响应最先想到的是你的mysql服务器是不是停止了检查一下,如果是mysql服务器停止服务了重启就可以解决问题了。
1、在APMServ5.2.6出现问题的最简单的解决办法是
在本地计算机无法启动APMServ-MySQL5.1服务,错误1067,进程意外中止”的方法很简单,只要进入“D:\Program Files\APMServ5.2.6\MySQL5.1\bin”文件夹,找到mysqld-nt.exe文件执行即可。
默认情况下,当启动APMServ的时候,在服务中MySql5.1都是没有启动的,需要执行mysqld-nt.exe文件,开启MySql服务
2.我们还是来检查phpmyadmin配置文件看看
方法一:查找
代码如下 | 复制代码 |
$cfg['Servers'][$i]['auth_type'] = ‘config’; 更改为 $cfg['Servers'][$i]['auth_type'] = ‘http’; |
访问的时候需要输入用户名和密码
方法二:”#2003 – 服务器没有响应”PHPMYADMIN登陆问题的解决
问题描述:
登陆PHPMYADMIN的时候提示 #2003 – 服务器没有响应
1 本地其它php+mysql程序运行正常;
2 phpmyadmin 以前运行正常,就最近出错.
解决办法:
找到/libraries/config.default.php文件中以下代码段:
复制内容到剪贴板代码:
代码如下 | 复制代码 |
$cfg['Servers'][$i]['auth_type'] = ‘config’; // Authentication method (valid choices: config, http, HTTP, signon or cookie) 验证方式一般填写cookie $cfg['Servers'][$i]['user'] = ‘root’; // MySQL user $cfg['Servers'][$i]['password'] = ”; // MySQL password (only needed with ‘config’ auth_type) 将其中的$cfg['Servers'][$i]['password'] 补上相应的正确密码. 3.连接mysql mysql.exe -u root -p -h 127.0.0.1 然后同步密码guoxue_mmkey_com mysql> SET PASSWORD FOR -> ‘ some_user ‘@’ some_host ‘ = OLD_PASSWORD(‘ newpwd ‘); 结合我们的实际情况,在 MySQL Command Line Client 下运行: set password for root@localhost = old_password(’123′);guoxue_mmkey_com guoxue_mmkey_com |
如果以上方法都不能解决,建议重新配置PHP,重新安装一次mysql即可,一般都能解决
注意:
检查防火墙是否关闭了3306端口,或者直接关闭防火墙测试是否可以正常连接到MYSQL,开始-运行,输入IISRESET重新启动IIS,保证mysql比IIS早启动
代码如下 | 复制代码 |
<?php $db = new ConnectionMySQL(); |
这里我要讲述一下关于构造函数
代码如下 | 复制代码 |
//构造函数 function __construct(){ $this->ut=$ut; $this->connect(); } |
这个页面使用了构造函数特别要主要在函数中不要调用数据库连接类了,否则在当前页面会有多连接连接如果访问过大服务器就会出mysql has gone的提法哦。
把下面php代码保存成backdata.class.php文件
代码如下 | 复制代码 |
<?php public function __construct($mysql_link){ ?> |
我们再创建一个新的文件与backdata.class.php保存在同一目录
使用方法:
代码如下 | 复制代码 |
require_once("backdata.class.php"); $link = @mysql_connect("localhost","数据库名","密码") or die ('Could not connect to server.'); mysql_query("use cms",$link); mysql_query("set names utf8",$link); $dbbck=new backupData($link);//实例化它,只要一个链接标识就行了 //备份数据时,如想备份一个数据库中的所有表,你可这样写: $dbbck->backupTables("cms","./",array('*')); //备份数据时,如想备份一个数据库中的仅一个表时,你可这样写: $dbbck->backupTables("cms","./",array('user')); //备份数据时,如想备份一个数据库中的多个表时,你可这样写: $dbbck->backupTables("cms","./",array('user','acl','informatoin')); //注解:$dbbck->backupTables("参1","参2",array());中, |
参1为:数据库名,
参2为:要存放备份数据的位置(即目录地址)
第三个为:你要保存那些表
下面为linux中的自动定时备份的代码
参考了网上的很多教程,外加自己的测试,以下脚本经测试可用。
代码如下 | 复制代码 |
#!/bin/bash #配置参数 #判断备份文件存储目录是否存在,否则创建该目录 #开始备份之前,将备份信息头写入日记文件 #切换至备份目录 #备份失败后向网站管理者发送邮件提醒,需要mailutils或者类似终端下发送邮件工具的支持 |
使用:
将以上代码保存到: /usr/sbin/DataBackup (文件名随意,只要不跟系统原有的命令同名即可;代码可以放到任何地方,放在sbin目录下只是为了方便执行,sbin目录下的文件/目录可在终端直接调 用,类似于windows下PATH变量指定的目录)
为脚本添加可执行权限: sudo chmod +x /usr/sbin/DataBackup
执行脚本: sudo DataBackup
如果需要定时执行备份命令的,只需将下面这段代码放到crontab 文件(sudo vim /etc/crontab)中去就可以了:
01 3 * * * root /usr/sbin/DataBackup #它代表着将于每天3点执行DataBackup脚本
小注意一下下:
linux 下的shell脚本定义变量的格式为: key=value ,注意他们两者之间的” = “前后不能出现空格,否则系统无法确认该变量。
用红色标注的那行,第一个类似单引号的字符”`”其实不是单引号,它的输入键在键盘ESC键下方。
这个脚本只适合用于一些小站点的备份,因为它是对数据库进行全部备份而不是增量备份,不适合大容量的数据库备份。
相对于两种方法定时备份算是最好的方法了,这样可以节省时间让机器在最少人访问时自动备案,而php备份类需要人为操作,当然在windows下也可以利用计划任务来实现了。
相关文章
- 操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 最基础的对数据的增加删除修改操作实例,菜鸟们收了吧...2013-09-26
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
Antd-vue Table组件添加Click事件,实现点击某行数据教程
这篇文章主要介绍了Antd-vue Table组件添加Click事件,实现点击某行数据教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-17- 这篇文章主要介绍了详解如何清理redis集群的所有数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-18
- 这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
- 在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
- 这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
- C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
- 这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
- 本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
- 通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
- 某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
- 在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
- 这篇文章主要介绍了mybatis-plus 处理大数据插入太慢的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-18
- mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21