mysql_connect与mysql_pconnect的区别详解

 更新时间:2016年11月25日 16:36  点击:22187
在mysql中我们会看到有两种常用的数据库连接模式,一种是长久连接,另一各是页面访问完之后就断了连接,下面我来分别介绍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
$con = mysql_connect("localhost","mysql_user","mysql_pwd");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

// 一些代码...

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脚本的事 还关系到数据库和办事器的设置。

本文章来给大家详细介绍在php中如何来调用执行mysql存储过程然后返回由存储过程返回的值了,有需要了解的同学可进入参考。

。调用存储过程的方法。

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 //
mysql> CREATE PROCEDURE employee_list (OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM t;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)


然后在php中如下写

 代码如下 复制代码

<h1>Employee listing</h1>
<form method="post" >
<p>Enter Department ID:
<input type="text" name="dept_id" size="4">
<input type="submit" name="submit" value="submit"><p>
</form>

<?php
$hostname = "localhost";
$username = "root";
$password = "secret";
$database = "prod";

if (IsSet ($_POST['submit'])) {

     $dbh = new mysqli($hostname, $username, $password, $database);

     /* check connection */
     if (mysqli_connect_errno()) {
          printf("Connect failed: %sn", mysqli_connect_error());
          exit ();
     }
     $dept_id = $_POST['dept_id'];

     if ($result_set = $dbh->query("call employee_list( $dept_id )")) {
          print ('<table border="1" width="30%"> <tr> '.
               '<td>Employee_id</td><td>Surname</td><td>Firstname</td></tr>');
          while ($row = $result_set->fetch_object()) {
               printf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>n",
                      $row->employee_id, $row->surname, $row->firstname);
          }
     } else {
          printf("<p>Error:%d (%s) %sn", mysqli_errno($dbh),
                 mysqli_sqlstate($dbh), mysqli_error($dbh));
     }
     print ("</table> ");
     $dbh->close();
}
?>

核心代码就是

 代码如下 复制代码

$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` ( 
  `id` int(11) NOT NULL auto_increment, 
  `name` varchar(50) NOT NULL, 
  `sex` varchar(10) NOT NULL, 
  `age` smallint(3) NOT NULL default '0', 
  PRIMARY KEY  (`id`) 
) ENGINE=MyISAM  DEFAULT CHARSET=utf8; 

我们还需要一个html交互页面,放置导入表单和导出按钮。

 代码如下 复制代码

<form id="addform" action="do.php?action=import" method="post" enctype="multipart/form-data"> 
    <p>请选择要导入的CSV文件:<br/><input type="file" name="file"> <input type="submit" 
    class="btn" value="导入CSV"> 
    <input type="button" class="btn" value="导出CSV" onclick="window.location.href='do.php? 
    action=export'"></p> 
</form> 

选择好本地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 
    $filename = $_FILES['file']['tmp_name']; 
    if (empty ($filename)) { 
        echo '请选择要导入的CSV文件!'; 
        exit; 
    } 
    $handle = fopen($filename, 'r'); 
    $result = input_csv($handle); //解析csv 
    $len_result = count($result); 
    if($len_result==0){ 
        echo '没有任何数据!'; 
        exit; 
    } 
    for ($i = 1; $i < $len_result; $i++) { //循环获取各字段值 
        $name = iconv('gb2312', 'utf-8', $result[$i][0]); //中文转码 
        $sex = iconv('gb2312', 'utf-8', $result[$i][1]); 
        $age = $result[$i][2]; 
        $data_values .= "('$name','$sex','$age'),"; 
    } 
    $data_values = substr($data_values,0,-1); //去掉最后一个逗号 
    fclose($handle); //关闭指针 
    $query = mysql_query("insert into student (name,sex,age) values $data_values");//批量插入数据表中 
    if($query){ 
        echo '导入成功!'; 
    }else{ 
        echo '导入失败!'; 
    } 

注意php自带的fgetcsv函数可以轻松处理csv,使用该函数可以从文件指针中读入一行并解析CSV字段。下面的函数将csv文件字段解析并以数组的形式返回。

 代码如下 复制代码

function input_csv($handle) { 
    $out = array (); 
    $n = 0; 
    while ($data = fgetcsv($handle, 10000)) { 
        $num = count($data); 
        for ($i = 0; $i < $num; $i++) { 
            $out[$n][$i] = $data[$i]; 
        } 
        $n++; 
    } 
    return $out; 

此外在导入到数据库中时,我们采用的是批量插入而不是一条条插入的,因此在构建SQL语句时,要稍作处理,见代码。

2.导出CSV

我们知道csv文件是由逗号分割符组成的纯文本文件,你可以用excel打开,效果跟xls表个一样。

导出CSV处理流程:读取学生信息表->循环记录构建逗号分隔的字段信息->设置header信息->导出文件(下载)到本地

 代码如下 复制代码

... 
} elseif ($action=='export') { //导出CSV 
    $result = mysql_query("select * from student order by id asc"); 
    $str = "姓名,性别,年龄n"; 
    $str = iconv('utf-8','gb2312',$str); 
    while($row=mysql_fetch_array($result)){ 
        $name = iconv('utf-8','gb2312',$row['name']); //中文转码 
        $sex = iconv('utf-8','gb2312',$row['sex']); 
        $str .= $name.",".$sex.",".$row['age']."n"; //用引文逗号分开 
    } 
    $filename = date('Ymd').'.csv'; //设置文件名 
    export_csv($filename,$str); //导出 

要将数据导出到本地即下在,需要修改header信息,代码如下:

 代码如下 复制代码

function export_csv($filename,$data) { 
    header("Content-type:text/csv"); 
    header("Content-Disposition:attachment;filename=".$filename); 
    header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); 
    header('Expires:0'); 
    header('Pragma:public'); 
    echo $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;

}

?>

上面全部使用了数据库来操作,下面来个完全的类

 代码如下 复制代码


class Cart { //开始购物车类
function check_item( $table, $session, $product) {
/*
查验物品(表名,session,物品)
*/
$query = SELECT * FROM $table WHERE session=' $session' AND product=' $product' ;
/*
看一看'表'里该'购物车'中有没有该'产品'
即,该产品有没有已经放入购物车
*/
$result = mysql_query( $query);
if(! $result) {
return 0;
}
/*
查询失败
*/
$numRows = mysql_num_rows( $result);
if( $numRows == 0) {
return 0;
/*
若没有找到,则返回0
*/
} else {
$row = mysql_fetch_object( $result);
return $row->quantity;
/*
若找到,则返回该物品数量
这里有必要解释一下mysql_fetch_object函数(下面还会用到):
【mysql_fetch_object() 和 mysql_fetch_array() 类似,只有一点区别 - 返回一个对象而不是数组。】
上面这句话摘自php手册,说得应该很明白了吧~
简单的说就是,取一条记录中的某个字段,应该用“->”而不是像数组一样用下标
*/
}
}
function add_item( $table, $session, $product, $quantity) {
/*
添加新物品(表名,session,物品,数量)
*/
$qty = $this->check_item( $table, $session, $product);
/*
调用上面那个函数,先检查该类物品有没有已经放入车中
*/
if( $qty == 0) {
$query = INSERT INTO $table (session, product, quantity) VALUES ;
$query .= (' $session', ' $product', ' $quantity') ;
mysql_query( $query);
/*若车中没有,则像车中添加该物品*/
} else {
$quantity += $qty; //若有,则在原有基础上增加数量
$query = UPDATE $table SET quantity=' $quantity' WHERE session=' $session' AND ;
$query .= product=' $product' ;
mysql_query( $query);
/*
并修改数据库
*/
}
}
function delete_item( $table, $session, $product) {
/*
删除物品(表名,session,物品)
*/
$query = DELETE FROM $table WHERE session=' $session' AND product=' $product' ;
mysql_query( $query);
/*
删除该购物车中该类物品
*/
}
function modify_quantity( $table, $session, $product, $quantity) {
/*
修改物品数量(表名,session,物品,数量)
*/
$query = UPDATE $table SET quantity=' $quantity' WHERE session=' $session' ;
$query .= AND product=' $product' ;
mysql_query( $query);
/*
将该物品数量修改为参数中的值
*/
}
function clear_cart( $table, $session) {
/*
清空购物车(没什么好说)
*/
$query = DELETE FROM $table WHERE session=' $session' ;
mysql_query( $query);
}
function cart_total( $table, $session) {
/*
车中物品总价
*/
$query = SELECT * FROM $table WHERE session=' $session' ;
$result = mysql_query( $query);
/*
先把车中所有物品取出
*/
if(mysql_num_rows( $result) > 0) {
while( $row = mysql_fetch_object( $result)) {
/*
如果物品数量>0个,则逐个判断价格并计算
*/
$query = SELECT price FROM inventory WHERE product=' $row->product' ;
$invResult = mysql_query( $query);
/*
从inventory(库存)表中查找该物品的价格
*/
$row_price = mysql_fetch_object( $invResult);
$total += ( $row_price->price * $row->quantity);
/*
总价 += 该物品价格 * 该物品数量
( 大家应该能看明白吧:) )
*/
}
}
return $total; //返回总价钱
}
function display_contents( $table, $session) {
/*
获取关于车中所有物品的详细信息
*/
$count = 0;
/*
物品数量计数
注意,该变量不仅仅为了对物品数量进行统计,更重要的是,它将作为返回值数组中的下标,用来区别每一个物品!
*/
$query = SELECT * FROM $table WHERE session=' $session' ORDER BY id ;
$result = mysql_query( $query);
/*
先取出车中所有物品
*/
while( $row = mysql_fetch_object( $result)) {
/*
分别对每一个物品进行取详细信息
*/
$query = SELECT * FROM inventory WHERE product=' $row->product' ;
$result_inv = mysql_query( $query);
/*
从inventory(库存)表中查找该物品的相关信息
*/
$row_inventory = mysql_fetch_object( $result_inv);
$contents[product][ $count] = $row_inventory->product;
$contents[price][ $count] = $row_inventory->price;
$contents[quantity][ $count] = $row->quantity;
$contents[total][ $count] = ( $row_inventory->price * $row->quantity);
$contents[description][ $count] = $row_inventory->description;
/*
把所有关于该物品的详细信息放入 $contents数组
$contents是一个二维数组
第一组下标是区别每个物品各个不同的信息(如物品名,价钱,数量等等)
第二组下标是区别不同的物品(这就是前面定义的 $count变量的作用)
*/
$count++; //物品数量加一(即下一个物品)
}
$total = $this->cart_total( $table, $session);
$contents[final] = $total;
/*
同时调用上面那个cart_total函数,计算下总价钱
并放入 $contents数组中
*/
return $contents;
/*
将该数组返回
*/
}
function num_items( $table, $session) {
/*
返回物品种类总数(也就是说,两个相同的东西算一种 好像是废话- -!)
*/
$query = SELECT * FROM $table WHERE session=' $session' ;
$result = mysql_query( $query);
$num_rows = mysql_num_rows( $result);
return $num_rows;
/*
取出车中所有物品,获取该操作影响的数据库行数,即物品总数(没什么好说的)
*/
}
function quant_items( $table, $session) {
/*
返回所有物品总数(也就是说,两个相同的东西也算两个物品 - -#)
*/
$quant = 0;// 物品总量
$query = SELECT * FROM $table WHERE session=' $session' ;
$result = mysql_query( $query);
while( $row = mysql_fetch_object( $result)) {
/*
把每种物品逐个取出
*/
$quant += $row->quantity; //该物品数量加到总量里去
}
return $quant; //返回总量
}
}

[!--infotagslink--]

相关文章

  • mysql_connect与mysql_pconnect的区别详解

    在mysql中我们会看到有两种常用的数据库连接模式,一种是长久连接,另一各是页面访问完之后就断了连接,下面我来分别介绍mysql_connect与mysql_pconnect的区别,有需要了解...2016-11-25
  • MySQL性能监控软件Nagios的安装及配置教程

    这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
  • 详解Mysql中的JSON系列操作函数

    新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作,下面就实际体验一下...2016-08-23
  • 深入研究mysql中的varchar和limit(容易被忽略的知识)

    为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类型的问题。 ...2015-03-15
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • mysql的3种分表方案

    一、先说一下为什么要分表:当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。根据个人经验,mysql执行一个sql的过程如下:1...2014-05-31
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • C#中out与ref的区别实例解析

    这篇文章主要介绍了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
  • Centos5.5中安装Mysql5.5过程分享

    这几天在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
  • 用VirtualBox构建MySQL测试环境

    宿主机使用网线的时候,客户机在Bridged Adapter模式下,使用Atheros AR8131 PCI-E Gigabit Ethernet Controller上网没问题。 宿主机使用无线的时候,客户机在Bridged Adapter模式下,使用可选项里唯一一个WIFI选项,Microsoft Virtual Wifi Miniport Adapter也无法上网,故弃之。...2013-09-19
  • 忘记MYSQL密码的6种常用解决方法总结

    首先要声明一点,大部分情况下,修改MySQL密码是需要有mysql里的root权限的...2013-09-11
  • MySQL数据库备份还原方法

    MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:/Program Files/MySQL/MySQL Server 4.1/bin (或者直接将windows的环境变量path中添加该目录) ...2013-09-26
  • Mysql命令大全(详细篇)

    一、连接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 11注册码\激活码汇总

    Navicat for MySQL注册码用来激活 Navicat for MySQL 软件,只要拥有 Navicat 注册码就能激活相应的 Navicat 产品。这篇文章主要介绍了Navicat for MySQL 11注册码\激活码汇总,需要的朋友可以参考下...2020-11-23
  • PS中像素大小、文档大小的区别

    在PS中像素大小、文档大小有什么区别呢,这个估计很多初学者不清楚,下面我来给大家讲解一下,希望对你有帮助。 1、像素大小 通常用于显示屏显示的图片大小的调整。菜...2016-09-14
  • 解决ORA-12170:TNS connect timeout occurred问题

    这篇文章主要介绍了解决ORA-12170:TNS connect timeout occurred问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11