mysql_connect与mysql_pconnect的区别详解
PHP mysql_pconnect
mysql_pconnect() 函数打开一个到 MySQL 服务器的持久连接。
mysql_pconnect() 和 mysql_connect() 非常相似,但有两个主要区别:
1.当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。
2.其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close() 不会关闭由 mysql_pconnect() 建立的连接)。
语法
mysql_pconnect(server,user,pwd,clientflag)参数 描述
server 可选。规定要连接的服务器。
可以包括端口号,例如 "hostname:port",或者到本地套接字的路径,例如对于 localhost 的 ":/path/to/socket"。
如果 PHP 指令 mysql.default_host 未定义(默认情况),则默认值是 'localhost:3306'。
user 可选。用户名。默认值是服务器进程所有者的用户名。
pwd 可选。密码。默认值是空密码。
clientflag 可选。client_flags 参数可以是以下常量的组合:
•MYSQL_CLIENT_SSL - 使用 SSL 加密
•MYSQL_CLIENT_COMPRESS - 使用压缩协议
•MYSQL_CLIENT_IGNORE_SPACE - 允许函数名后的间隔
•MYSQL_CLIENT_INTERACTIVE - 允许关闭连接之前的交互超时非活动时间
返回值
如果成功,则返回一个 MySQL 持久连接标识符,出错则返回 FALSE。
提示和注释
注释:可选参数 clientflag 自 PHP 4.3.0 版起可用。
提示:要创建一个非持久连接,请使用 mysql_connect() 函数。
例子
代码如下 | 复制代码 |
<?php $con = mysql_pconnect("localhost","mysql_user","mysql_pwd"); if (!$con) { die('Could not connect: ' . mysql_error()); } ?> |
PHP mysql_connect
mysql_connect() 函数打开非持久的 MySQL 连接。
语法
mysql_connect(server,user,pwd,newlink,clientflag)参数 描述
server 可选。规定要连接的服务器。
可以包括端口号,例如 "hostname:port",或者到本地套接字的路径,例如对于 localhost 的 ":/path/to/socket"。
如果 PHP 指令 mysql.default_host 未定义(默认情况),则默认值是 'localhost:3306'。
user 可选。用户名。默认值是服务器进程所有者的用户名。
pwd 可选。密码。默认值是空密码。
newlink 可选。如果用同样的参数第二次调用 mysql_connect(),将不会建立新连接,而将返回已经打开的连接标识。参数 new_link 改变此行为并使 mysql_connect() 总是打开新的连接,甚至当 mysql_connect() 曾在前面被用同样的参数调用过。
clientflag 可选。client_flags 参数可以是以下常量的组合:
•MYSQL_CLIENT_SSL - 使用 SSL 加密
•MYSQL_CLIENT_COMPRESS - 使用压缩协议
•MYSQL_CLIENT_IGNORE_SPACE - 允许函数名后的间隔
•MYSQL_CLIENT_INTERACTIVE - 允许关闭连接之前的交互超时非活动时间
返回值
如果成功,则返回一个 MySQL 连接标识,失败则返回 FALSE。
提示和注释
注释:脚本一结束,到服务器的连接就被关闭,除非之前已经明确调用 mysql_close() 关闭了。
提示:要创建一个持久连接,请使用 mysql_pconnect() 函数。
例子
代码如下 | 复制代码 |
<?php // 一些代码... mysql_close($con); |
mysql_connect与mysql_pconnect的区别
这俩函数用法上差不久不多,网上有说应当用pconnect的,pconnect是个 好器材;也有视pconnect如洪水猛兽的,果断不让用pconnect的,也有立场模糊不清的。那这个器材到底如何呢?
永远链接并不是说,办事器打开了一个连接,然后所有的人都共享这个链接。永远连接一样是每个客户端来就打开一个连接,有200人接见就有200个连接。其 实mysql_pconnect()本身并没有做太多的处理惩罚, 它独一做的只是在php运行停止后不主动close掉mysql的连接.
在php经cgi体式格式运行时pconnect和connect是根蒂根基没有区此外, 因为cgi体式格式是每一个php接见起一个过程, 接见停止掉队程也就停止了, 资料也全开释了. 当php以apache模块体式格式运行时, 因为apache有应用过程池, 一个httpd过程停止后会被放回过程池, 这也就使得用pconnect打开的的那个mysql连接资料不被开释, 于是有下一个连接恳求时就可以被复用.这就使得在apache并发接见量不大的时辰, 因为应用了pconnect, php节俭了反复连接db的时候, 使得接见速度加快. 这应当是斗劲好懂得的. 然则在apache并发接见量大的时辰, 若是应用pconnect, 会因为之前的一些httpd过程占用的mysql连接没有close, 则可能会因为mysql已经达到最大连接着, 使得之后的一些恳求永远得不到满足.若mysql最大连接数设为500, 而apache的最大同时接见数设为2000,假设所有接见都邑请求接见db, 并且操纵时候会斗劲长,当前500个恳求的httpd都没有停止的时辰,之后的httd过程都是无法连接到mysql的(因已经达到mysql最大连接 数). 只有当前500个httpd过程停止或被复用才可以连接获得了mysql.
当db操纵错杂, 耗时较长时, 因httpd会fork很多并发过程处理惩罚, 而先产生的httpd过程不开释db连接, 使得后产生的httpd过程无法连上db. 因为如许没有复用其它httpd过程的mysql连接. 于是会就产生很多连接超时。 在并发接见量不高时,应用pconnect可以简单进步接见速度, 但在并发量增大后, 是否再应用pconnect就要见地度员的选择了.
就我小我认为, php如今对mysql的连接并没有真正用到连接池, pconnect也只是相当于借了apache的过程池来用, 所以在并发接见量大的时辰pconnect并不克不及很好的进步接见db效力.
在实际的应用中,用mysql_pconnect的话,每次刷新和恳求新的页面都斗劲快,而用mysql_connect的话,每次刷新都要从头恳求,当数据库连接斗劲慢的时辰,就能看出差别了。当你的数据库连接斗劲慢,DB操纵不是很错杂,并且你的法度足够自负,不会产存亡锁的时辰,或者你拥有对办事器的把握权,满足以上四个前提中的随便率性两个,那就可以用pconnect。
pconnect不消在脚本里封闭,可以在mysql中设置lifetime,也可以写shell按期扫描,kill掉休眠过长的连接。 一句话总结:要用好pconnect,不仅仅是php脚本的事 还关系到数据库和办事器的设置。
。调用存储过程的方法。
a。如果存储过程有 IN/INOUT参数,声明一个变量,输入参数给存储过程,该变量是一对,一个php变量(也可以不必,只是没有php变量时,没有办法进行动态输入),一个Mysql变量。
b。如果存储过程有OUT变量,声明一个Mysql变量。mysql变量的声明比较特殊,必须让mysql服务器知道此变量的存在,其实也就是执行一条mysql语句。入set @mysqlvar=$phpvar ;
c。使用mysql_query()/mysql_db_query()执行mysql 变量声明语句。
代码如下 | 复制代码 |
mysql_query("set @mysqlvar【=$pbpvar】"); |
这样,在mysql服务器里面就有一个变量,@mysqlar。如果时IN参数,那么其值可以有phpar传入
例
利用mysqli函数实例
我们先可在mysql创建一个存储过程
代码如下 | 复制代码 |
mysql> delimiter // |
然后在php中如下写
代码如下 | 复制代码 |
<h1>Employee listing</h1> <?php if (IsSet ($_POST['submit'])) { $dbh = new mysqli($hostname, $username, $password, $database); /* check connection */ if ($result_set = $dbh->query("call employee_list( $dept_id )")) { |
核心代码就是
代码如下 | 复制代码 |
$result_set = $dbh->query("call employee_list( $dept_id )") |
这句了employee_list是我们的mysql存储过程了
因为工作需要我们需要把mysql中的数据导出成csv文件,然后由商家提供的数据我们再要利用php导入csv文件到mysql数据库,下面我来给大家介绍PHP把导入和导出CSV文件到mysql数据库程序代码,有需要了解的朋友可参考。
下面只是一个简单的实例
我们先准备mysql数据表,假设项目中有一张记录学生信息的表student,并有id,name,sex,age分别记录学生的姓名、性别、年龄等信息。
代码如下 | 复制代码 |
CREATE TABLE `student` ( |
我们还需要一个html交互页面,放置导入表单和导出按钮。
代码如下 | 复制代码 |
<form id="addform" action="do.php?action=import" method="post" enctype="multipart/form-data"> |
选择好本地csv文件后,点击导入,提交到do.php?action=import处理,而点击导出按钮则请求地址do.php?action=export进行数据导出处理。
1.导入CSV
do.php需要根据get过来的参数,分别处理导入和导出过程,php结构如下:
include_once ("connect.php"); //连接数据库
代码如下 | 复制代码 |
$action = $_GET['action']; if ($action == 'import') { //导入CSV //导入处理 } elseif ($action=='export') { //导出CSV //导出处理 } |
导入CSV处理流程:校验csv文件合法性(本文忽略)->打开读入并解析csv文件中的字段->循环获取各字段值->批量添加到数据表中->完成。
代码如下 | 复制代码 |
if ($action == 'import') { //导入CSV |
注意php自带的fgetcsv函数可以轻松处理csv,使用该函数可以从文件指针中读入一行并解析CSV字段。下面的函数将csv文件字段解析并以数组的形式返回。
代码如下 | 复制代码 |
function input_csv($handle) { |
此外在导入到数据库中时,我们采用的是批量插入而不是一条条插入的,因此在构建SQL语句时,要稍作处理,见代码。
2.导出CSV
我们知道csv文件是由逗号分割符组成的纯文本文件,你可以用excel打开,效果跟xls表个一样。
导出CSV处理流程:读取学生信息表->循环记录构建逗号分隔的字段信息->设置header信息->导出文件(下载)到本地
代码如下 | 复制代码 |
... |
要将数据导出到本地即下在,需要修改header信息,代码如下:
代码如下 | 复制代码 |
function export_csv($filename,$data) { |
注意导入和导出的过程中,因为我们使用的是统一UTF-8编码,遇到中文字符一定要记得转码,否则可能会出现中文乱码的情况。
PHP把导入和导出CSV文件下载:http://file.111cn.net/download/2013/05/15/importCSV.rar
使用文本数据库一般是针对小型的应用程序了,这种不就需要安装数据库了,我们可以直接操作文本文件就可以了,但时怎么操作都不如mysql数据库好用了,下面我来给大家介绍一个文本数据库转为mysql数据库实例。
代码如下 | 复制代码 |
<?php require_once 'config.php'; $action = empty($_GET['action']) ? '' : $_GET['action']; $id = isset($_GET['id']) ? $_GET['id'] : 0; if (empty($action)) {//列表 $result = "SELECT * FROM posts ORDER BY pid DESC"; $items = 3; $page = isset($_GET['page']) ? intval($_GET['page']) : 1; $page = ($page =='' && $page < 0) ? 1 : $page; $total = mysql_num_rows(mysql_query($result));//数据条目总数 $pageall = ceil($total/$items); $offset = ($page-1)*$items;//数据开始位置 $result .= " limit {$offset},{$items}";//每页显示 $results = mysql_query($result); $prev = $page - 1; $next = $page + 1; $goPrev = "<a href="?page=$prev">上一页</a>"; $goNext = "<a href="?page=$next">下一页</a>"; if ($page == $pageall){ $goNext = NULL;} $pagestate = ''; if ($page == 1 && $pageall > 1) { $pagestate .= $goNext; } elseif ($pageall > $page || $page >1) { $pagestate .= $goNext . '|' .$goPrev; } elseif ($page >1 ) { $pagestate .= $goPrev; } else { $pagestate .= 'Just One Page'; } $pagelinks = ''; for ($i = 1; $i <= $pageall; $i++) { $pagelinks .= ($i != $page) ? "<a href="?page=$i">$i</a>" : $i; $pagelinks .= ($i < $pageall) ? '-' : null; } // end 分页 $data = array(); //列出文章 while ($row = mysql_fetch_array($results)) {//mysql_fetch_array ; 从查询结果取出一行作为数组; $data[] = $row;// } //列出分类 $recat = mysql_query("SELECT * FROM category ORDER BY cid DESC"); $cdata = array(); while ($catlist = mysql_fetch_array($recat)) { $cdata[$catlist['cid']] = $catlist; } include template('index'); } elseif ($action == 'post') {//发表 $title = $_POST['title']; $date = date("Y-m-d H:i:s"); $content = $_POST['content']; $cid = $_POST['cat']; if ($title == '' || $content == '' || $cid == '') { echo "缺少必填项nnnn<a href="javascript:history.go(-1);">返回</a>"; } else { $insertPost = "INSERT INTO posts (title,time,post,cid) VALUES ('$title','$date','$content','$cid')"; if (!mysql_query($insertPost,$sql)) { die('ERROR: '. mysql_error()); } header('location: index.php'); } } elseif ($action == 'view') {//查看 $view = mysql_query("SELECT * FROM posts WHERE pid='$id'"); while ($row = mysql_fetch_array($view)) { $title = $row['title']; $time = $row['time']; $post = $row['post']; } if ($_SERVER['REQUEST_METHOD'] == 'POST') {//评论 $name = isset($_POST['name']) ? $_POST['name'] : 0; $review = isset($_POST['review']) ? $_POST['review'] : 0; if ($name == '' && $review == '') { echo "缺少必填项"; exit; } $insertRview = "INSERT INTO review (pid,name,review) VALUES ('$id','$name','$review')"; if (!mysql_query($insertRview,$sql)) { die('ERROR: ' . mysql_error()); } header("location: ?action=view&id=$id"); } $rert = mysql_query("SELECT * FROM review WHERE pid='$id' ORDER BY rid ASC"); $data = array(); while ($relist = mysql_fetch_array($rert)){ $data[] = $relist; } include template('view'); } elseif ($action == 'del') {//删除 mysql_query("DELETE FROM posts WHERE pid='$id'"); header("location: index.php"); } elseif ($action == 'edit') {//编辑 if ($_SERVER['REQUEST_METHOD'] == 'POST') { $title = $_POST['title']; $content = $_POST['content']; $date = date("Y-m-d H:i:s"); if ($title == '' or $content == '') { echo "缺少必填项nnnn<a href="javascript:history.go(-1);">返回</a>"; exit;} mysql_query("UPDATE posts SET title='$title',time='$date',post='$content' WHERE pid='$id'"); header("location: index.php"); } else { $row = mysql_query("SELECT * FROM posts WHERE pid='$id'"); $row = mysql_fetch_array($row); include template('edit'); } } elseif ($action == 'newcat') {//新建分类 $cat = isset($_POST['category']) ? $_POST['category'] : 0; if ($_SERVER['REQUEST_METHOD'] == 'POST') { if ($cat == '') { echo "缺少必填项nnnn<a href="javascript:history.go(-1);">返回</a>"; exit;} $insertCat = "INSERT INTO category (category) VALUES ('$cat')"; if (!mysql_query($insertCat,$sql)){ die('ERROR: ' . mysql_error()); } header("location: index.php"); } include template('jioncat'); } elseif ($action == 'vcat') { $cid = $_GET['cid']; $revcats = "SELECT * FROM posts WHERE cid='$cid' ORDER BY cid DESC"; $items = 1; $page = isset($_GET['page']) ? intval($_GET['page']) : 1; $page = ($page =='' && $page < 0) ? 1 : $page; $total = mysql_num_rows(mysql_query($revcats));//数据条目总数 $pageall = ceil($total/$items); $offset = ($page-1)*$items;//数据开始位置 $revcats .= " limit {$offset},{$items}";//每页显示 $revcat = mysql_query($revcats); $prev = $page - 1; $next = $page + 1; $goPrev = "<a href="?action=vcat&cid=$cid&page=$prev">上一页</a>"; $goNext = "<a href="?action=vcat&cid=$cid&page=$next">下一页</a>"; if ($page == $pageall){ $goNext = NULL;} $pagestate = ''; if ($page == 1 && $pageall > 1) { $pagestate .= $goNext; } elseif ($pageall > $page || $page >1) { $pagestate .= $goNext . '|' .$goPrev; } elseif ($page >1 ) { $pagestate .= $goPrev; } else { $pagestate .= 'Just One Page'; } $pagelinks = ''; for ($i = 1; $i <= $pageall; $i++) { $pagelinks .= ($i != $page) ? "<a href="?action=vcat&cid=$cid&page=$i">$i</a>" : $i; $pagelinks .= ($i < $pageall) ? '-' : null; } $data = array(); while ($vclist = mysql_fetch_array($revcat)) { $data[] = $vclist; } include template('cplist'); } mysql_close($sql); |
题外话了,一个access转换成mysql数据库的实例
点击下载:http://file.111cn.net/download/2013/05/14/db2mysql.zip
购物车数量意思就是在我们买东西时可以随时删除工增加商品,这样我们的购物车就必须更新记录啊,下面我来给大家介绍PHP购物车更新购物车数量程序与原因,有需要了解的朋友可参考。表单部分:
代码如下 | 复制代码 |
<form action="?action=edit_num" method="post" name="car<?php $c_rs['id'];?>" id="car<?php $c_rs['id'];?>"> <input name="suliang[<?php echo $c_rs['sp_id'];?>]" type="text" id="suliang[<?php echo $c_rs['sp_id'];?>]" value="<?php echo $c_rs['suliang'];?>"/> <input type="submit" name="button" id="button" value="更新购物车" /> </form> |
PHP 处理部分:
代码如下 | 复制代码 |
<?php require 'config.inc.php'; require 'checklogin.php'; $username = $_SESSION['username']; $action = $_GET['action']; switch ($action) { case "edit_num": $arr = $arr = $_POST['suliang']; foreach($arr as $key=>$value){ $sqlgx = "update `cartemp` set suliang='$value' where username='".$username."' and flag=0 and sp_id='".$key."'"; mysql_query($sqlgx, $conn); echo "<script>location.href='shopcat.php'</script>"; } break; case "null": $null_sql = "delete from `cartemp` where username='$username' and flag=0 "; mysql_query($null_sql, $conn); echo "<script>location.href='shopcat.php'</script>"; break; case "del": $id = $_GET['id']; $del_sql = "delete from `cartemp` where id=$id"; mysql_query($del_sql, $conn); echo "<script>location.href='shopcat.php'</script>"; break; } ?> |
上面全部使用了数据库来操作,下面来个完全的类
代码如下 | 复制代码 |
|
相关文章
mysql_connect与mysql_pconnect的区别详解
在mysql中我们会看到有两种常用的数据库连接模式,一种是长久连接,另一各是页面访问完之后就断了连接,下面我来分别介绍mysql_connect与mysql_pconnect的区别,有需要了解...2016-11-25- 这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
- 新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作,下面就实际体验一下...2016-08-23
深入研究mysql中的varchar和limit(容易被忽略的知识)
为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类型的问题。 ...2015-03-15- 这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
- 一、先说一下为什么要分表:当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。根据个人经验,mysql执行一个sql的过程如下:1...2014-05-31
- 我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
- 这篇文章主要介绍了C#中out与ref的区别实例解析,对C#初学者有不错的学习借鉴价值,需要的朋友可以参考下...2020-06-25
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04- 这几天在centos下装mysql,这里记录一下安装的过程,方便以后查阅Mysql5.5.37安装需要cmake,5.6版本开始都需要cmake来编译,5.5以后的版本应该也要装这个。安装cmake复制代码 代码如下: [root@local ~]# wget http://www.cm...2015-03-15
php cURL https链接报错:Unknown SSL protocol error in connection to
cURL在php中用到的比较多了我们通常把它用于采集访问或数据模拟提交上了,但在用到https时我们使用常用的办法会提示报错:Unknown SSL protocol error in connection to...2016-11-25谈谈Jquery中的children find 的区别有哪些
精华:find方法能找子孙,children方法只能找儿子一、Jquery中children 语法.children(selector) 说明expr是表达式,可选参数,所有选择器中的表达式都可以用在这,比如按标签名"div",按类名".class",按序号":first"等等,如果表...2015-10-21- 宿主机使用网线的时候,客户机在Bridged Adapter模式下,使用Atheros AR8131 PCI-E Gigabit Ethernet Controller上网没问题。 宿主机使用无线的时候,客户机在Bridged Adapter模式下,使用可选项里唯一一个WIFI选项,Microsoft Virtual Wifi Miniport Adapter也无法上网,故弃之。...2013-09-19
- 首先要声明一点,大部分情况下,修改MySQL密码是需要有mysql里的root权限的...2013-09-11
- MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:/Program Files/MySQL/MySQL Server 4.1/bin (或者直接将windows的环境变量path中添加该目录) ...2013-09-26
- 一、连接Mysql格式: mysql -h主机地址 -u用户名 -p用户密码1、连接到本机上的MYSQL。首先打开DOS窗口,然后进入目录mysql/bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密...2015-11-08
解决Docker中的error during connect异常情况
这篇文章主要介绍了解决Docker中的error during connect异常情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-22- Navicat for MySQL注册码用来激活 Navicat for MySQL 软件,只要拥有 Navicat 注册码就能激活相应的 Navicat 产品。这篇文章主要介绍了Navicat for MySQL 11注册码\激活码汇总,需要的朋友可以参考下...2020-11-23
- 在PS中像素大小、文档大小有什么区别呢,这个估计很多初学者不清楚,下面我来给大家讲解一下,希望对你有帮助。 1、像素大小 通常用于显示屏显示的图片大小的调整。菜...2016-09-14
解决ORA-12170:TNS connect timeout occurred问题
这篇文章主要介绍了解决ORA-12170:TNS connect timeout occurred问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11