今天碰到一个连接mysql的怪问题,我在php 环境本地用ip连接mysql响应快,用localhost连接慢,后来百度了一下整理了一些解决办法,大家一起来看看。
很长时间了,本地php环境,用localhost连接mysql时,只要访问有查询数据库的页面,就会发生响应慢的现象,找了些资料也没解决。
今天突然用ip连接了一下,发下速度竟然快了好多,朋友过来帮看了下。
检查了一下hosts文件,发现127.0.0.1没有解析到localhost,恍然大悟啊。
没有解析过去,响应速度当然慢了,它每次都要自己查找一遍。
第二种就是修改php.ini配置文件里的mysql.default_host,并且把mysql_connect()中的第一个参数写为空字符串;这个方法还没有测试成功过,可能是我把某些地方忽略了吧~~
远程连接MYSQL慢
出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析,在my.ini(WINDOWS系统下)或MY.CNF(UNIX或LINUX系统下)文件的[mysqld]下加入skip-name-resolve这一句,保存。
开始--》运行--》cmd--》net stop mysql --》net start mysql--》哈哈,成功
my.ini所在路径如:D:\Program Files\MySQL\MySQL Server 5.0\my.ini
原来是MySQL的问题呀,这样操作后就不能在MySQL的授权表中使用主机名了而只能用ip。
socket_connect函数在php默认安装是不给支持的,如果要使用它我们需要在php.ini中进行简单的开启,下面我们一起来看看吧。
linux系统中开启socket_connect方法
#cd /home/php/ext/sockets #/server/php/bin/phpize #./configure --prefix=/usr/local/php/lib --with-php-config=/server/php/bin/php-config --enable-sockets #make #make install
再修改/usr/local/php/etc/php.ini文件
#extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/" (php5.4版本以上不用加扩展路径) extension=sockets.so
windows系统开启socket_connect步骤
直接修改php.ini 文件 去掉extension=PHP_sockets.dll 前面的分号
最后重启一下你的服务器环境就可以了,如iis apache nginx都可以正常使用socket_connect函数
socket_connect 说明
bool socket_connect ( resource $socket , string $address [, int $port = 0 ] )
成功时返回 TRUE, 或者在失败时返回 FALSE。
例子
代码如下 |
复制代码 |
<?php
$address = gethostbyname ($ip);
$command = "ping -c 1 " . $address;
$r = exec($command);
if ($r[0]=="r")
{
$socket = socket_create (AF_INET, SOCK_STREAM, 0);
if ($socket < 0) {
echo "socket_create() failed: reason: " . socket_strerror ($socket) . "n";
} else {
echo "OK.n";
}
?>
|
下面来一个朋友写的php实现redis数据库指定库号迁移,希望例子能给各位带来帮助哦。
redis普通的数据库迁移,只能整个redis save,或者利用主从,当然也可以安装一个redis-dump,不过比较麻烦,这里提供一种php的脚本,实现指定库号的迁移,其实也就是遍历根据存储类型,读出来,插入新库;效果是这样:
代码如下 |
复制代码 |
[root@localhost ~]# php 1.php
1/407
101/407
201/407
301/407
401/407
|
上代码:
代码如下 |
复制代码 |
<?php
$from = '10.0.2.52:6379/7';
$to = '127.0.0.1:6379/7';
$from_redis = redis_init($from);
$to_redis = redis_init($to);
$keys = $from_redis->keys('*');
$count = 0;
$total = count($keys);
foreach($keys as $key){
if(++$count % 100 == 1){
echo "$count/$total\n";
}
$type = $from_redis->type($key);
switch($type){
case Redis::REDIS_STRING:
$val = $from_redis->get($key);
$to_redis->set($key, $val);
break;
case Redis::REDIS_LIST:
$list = $from_redis->lRange($key, 0, -1);
foreach($list as $val){
$to_redis->rPush($key, $val);
}
break;
case Redis::REDIS_HASH:
$hash = $from_redis->hGetAll($key);
$to_redis->hMSet($key, $hash);
break;
case Redis::REDIS_ZSET:
$zset = $from_redis->zRange($key, 0, -1, true);
foreach($zset as $val=>$score){
$to_redis->zAdd($key, $score, $val);
}
break;
}
}
function redis_init($conf){
$redis = new Redis();
preg_match('/^([^:]+)(:[0-9]+)?\\/(.+)?/', $conf, $ms);
$host = $ms[1];
$port = trim($ms[2], ':');
$db = $ms[3];
$redis->connect($host, $port);
$redis->select($db);
return $redis;
}
|
我们要实现通过php调用sql把数据写入到mysql数据库是非常的简单的我们只要三就步可以实现了,下面来给大家整理php向mysql写入数据的例子。
PHP向MySQL数据库中写入数据有三个步骤:
1,PHP和MySQL建立连接关系
2,打开MySQL数据库
3,接受页面数据,PHP录入到指定的表中
1、2两步可直接使用一个数据库链接文件即可:conn.php
代码如下 |
复制代码 |
<?php
mysql_connect("localhost","root","");//连接MySQL
mysql_select_db("hello");//选择数据库
?>
|
当然,前提是已经安装WEB服务器、PHP和MySQL,并且建立MySQL表“cnbruce”
mysql_connect()中三个参数分别为MySQL地址、MySQL用户名和MySQL密码
然后就是通过WEB页面传递数据,让PHP通过SQL语句将数据写入MySQL数据库指定的表中,比如新建文件 post.php
代码如下 |
复制代码 |
<?php
require_once("conn.php");//引用数据库链接文件
$uname = $_GET['n'];//GET方法为URL参数传递
$psw = $_GET['p'];
$psw=md5($psw);//直接使用MD5加密
$sql = "insert into members(username,password) values ('$uname','$psw')";
mysql_query($sql);//借SQL语句插入数据
mysql_close();//关闭MySQL连接
echo "成功录入数据";
?>
|
测试页面: http://localhost/post.php?n=cnbruce&p=i0514
即可向MySQL数据库hello的members表中插入新的数据“cnbruce”到username字段、“i0514”到password字段
补充:读取表
读取表中的内容,这里我们用while,可以根据具体情况,用for 或其他的.
代码如下 |
复制代码 |
while($row = mysql_fetch_array($result))
{
echo "<div style="height:24px; line-height:24px; font-weight:bold;">"; //排版代码
echo $row['Topic'] . "<br/>";
echo "</div>"; //排版代码
}
|
上面是接受的post例子
代码如下 |
复制代码 |
<?php
$con=mysql_connect("localhost","root","gl");
mysql_select_db("happysea");
$name=$_POST['name'];
$password=$_POST['password'];
$sex=$_POST['sex'];
$e_mail=$_POST['e_mail'];
$question=$_POST['question'];
$answer=$_POST['answer'];
$sql="insert into userinfo(name,password,sex,e_mail,question,answer)
values('$name','$password','$sex','$e_mail','$question','$answer')";
if(!$sql)
{
echo('注册失败!');
}
else
{
echo('注册成功!');
}
?>
这是数据库。
mysql> describe userinfo;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | text | YES | | NULL | |
| password | varchar(20) | YES | | NULL | |
| sex | char(4) | YES | | NULL | |
| e_mail | varchar(30) | YES | | NULL | |
| question | text | YES | | NULL | |
| answer | text | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
|
php导入excel文件入mysql数据库我们是需一借助一个phpexcel类文件了,有了这个类文件我们就可以快速简单的导入excel到mysql数据库中,下面来给大家整理一个例子,希望能对大家有帮助。
导入前我们需要先准备一个数据库,sql语句代码
代码如下 |
复制代码 |
/*
Navicat MySQL Data Transfer
Source Server : www.111cn.net localhost
Source Server Version : 50133
Source Host : localhost:3306
Source Database : test
Target Server Type : MYSQL
Target Server Version : 50133
File Encoding : 65001
Date: 2011-10-11 14:11:38
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `execl`
-- ----------------------------
DROP TABLE IF EXISTS `execl`;
CREATE TABLE `execl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of execl
-- ----------------------------
INSERT INTO `execl` VALUES ('14', 'jim');
INSERT INTO `execl` VALUES ('15', 'taurus');
|
php处理程序,在这里我们需要使用一个phpexcel类文件了,这个可以百度搜索下载。
代码如下 |
复制代码 |
<?php
if($_FILES['execl']['name']){
$db = mysql_connect('localhost','root','');
mysql_select_db('test');
mysql_query('set names gbk');
require_once 'reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP936');
$data->read($_FILES['execl']['name']);
error_reporting(E_ALL ^ E_NOTICE);
$sql = "";
for($i=1;$i<=$data->sheets[0]['numRows'];$i++)
{
if($data->sheets[0]['cells'][$i][1]!=""){
$sql = "INSERT INTO `execl`(`name`)values('".$data->sheets[0]['cells'][$i][2]."');";
if(mysql_query($sql)){
echo '成功';
}else{
die('失败');
}
}
}
}
?>
<head>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="execl" />
<input type="submit" value="导入数据" />
</form>
</body>
|
标签:[!--infotagslink--]