php mysql_connect 与mysql_pconnect实现与详细说明

 更新时间:2016年11月25日 16:38  点击:1804
在php中连接mysql数据库有二种如有mysql_connect 与mysql_pconnect,一个是软连接,一个是持续连接,两者区别在于一个当页面浏览完自动关闭已经打开的MySQL连接页mysql_pconnect如果不关闭就一直连接。

$hostname="localhost";        //定义连接到的mysql服务器名
$username="root";         //定义用于连接的用户名
$password="";          //定义用于连接的密码
$link=mysql_connect($hostname,$username,$password);  //连接到本地mysql服务器
if($link)           //如果成功连接
{
  echo "成功连接";         //输出内容
}
else            //如果连接失败
{
  echo "连接失败";         //输出内容
}
//mysql_close($link) //关闭已经打开的mysql连接

//mysql_pconnect连接mysql数据库

$link=mysql_pconnect($hostname,$username,$password);  //打开持续性连接
if(!$link)            //如果不能连接
{
  die('不能连接'.mysql_error());        //输出信息
  exit();            //结束所有php操作
}
echo '持续连接成功';

/*
下面看软连接查询数据库内容

*/

$link=mysql_connect($hostname,$username,$password)or die("could not connect:".mysql_error());
//转换编码以支持中文
mysql_query('set   names   gb2312;');
//选择操作库test
mysql_select_db("test")or die("could not select database:".mysql_error());
//执行sql查询,从表中选择名字
$query="select name from friends";
$result=mysql_query($query)or die("query failed:".mysql_error());
//匹配结果集到行循环输出内容
for($i=mysql_num_rows($result)-1;$i>=0;$i--)
{
//移动内部结果的指针,如果没有结果则输内容
  if(!mysql_data_seek($result,$i))
  {
    echo "cannot seek to row $i:".mysql_error()."n";
    continue;
  }
//从查询结果取得一行作为对象
  if(!($row=mysql_fetch_object($result)))
  continue;
//输出结果内容
  echo "$row->name<br/>n";
}
//释放结果集
mysql_free_result($result);

/*
其它操作

$escaped_item=mysql_escape_string($str);    //将字符串转义
printf("escaped string:%sn",$escaped_item);    //输出转义后的结果

$mydb=mysql_list_dbs($link);      //列出数据库
while($result=mysql_fetch_object($mydb))   //通过循环遍历结果集并赋值给对象
{
  echo $result->database."n";      //输出对象内容
  echo "<br>";
}

odbc_connect() 函数用于连接到 ODBC 数据源。该函数有四个参数:数据源名、用户名、密码以及可选的指针类型参数。

odbc_exec() 函数用于执行 sql 语句

$db_user="dbuser";         //定义连接用户名
$db_pass="dbpass";         //连接用户对应的密码
$dsn="dsn";          //定义dsn资料来源
if(odbc_connect($dsn,$db_user,$db_pass))    //对odbc数据源进行连接
{
  echo "成功连接到odbc数据源";      //如果成功输出内容
}
else
{
  echo "连接到odbc时出现问题!";     //如果失败输出内容
}

odbc_close_all();        //关闭所有打开的连接
echo "所有打开的odbc连接都已经被关闭!";   //执行函数后输出内容


看一个更高级的与主机连接

$db_host="server.mynetwork";        //定义主机名
$db_user="dbuser";          //定义连接用户名
$db_pass="dbpass";          //定义用户对应的密码
$dsn="dsn";           //定义dsn
$result=odbc_pconnect($dsn,$db_user,$db_pass);    //打开持续有效的odbc连接
if($result)            //对结果进行判断
{
  echo "打开一个持续有效的连接";       //成功执行输出内容
}
echo "<br>";
if(odbc_close($result))         //尝试关闭连接
{
  echo "关闭了?";          //如果成功关闭输出内容
}
else
{
  echo "不能关!";          //如果关闭失败输出内容
}

查询数据库教程存

数据源进行连接

$my_sql="select * from usertable";      //定义sql语句
$result=odbc_do($myconn,$my_sql);     //执行sql语句
echo odbc_num_rows($result);
echo "<table border="1">n";
echo "<tr>n";
echo "<td>id号</td>n";
echo "<td>name</td>n";
echo "<td>address</td>n";
echo "</tr>n";
while(odbc_fetch_row($result))
{
  echo "<tr>n";
  echo "<td>".odbc_result($result,1)."</td>n";
  echo "<td>".odbc_result($result,2)."</td>n";
  echo "<td>".odbc_result($result,3)."</td>n";
  echo "</tr>n";
}
echo "</table>";


一些相关

odbc_free_result($result);        //释放执行sql语句占用的内存
echo "已经成功释放结果集占用的内存!";
odbc_rollback($myconn)取消所有未提交的操作
odbc_commit($myconn) //提交所有未提交的操作
odbc_autocommit($myconn,false);      //禁止自动commit
odbc_columnprivileges($myconn,"dbuser","管理员","usertable","name"); //列出给定表的列和权限
$result=odbc_columns($myconn);      //列出指定表的列的名称
echo odbc_result_all($result); 

php与mysql是黄金组合,现在我们来讲一下关于php查询mysql数据库记录实现,主要会用到函数mysql_connect mysql_query mysql_select_db mysql_fetch_array四个php函数,下面看实现。
$hostname="localhost";         //定义连接到的mysql服务器名
$username="root";          //定义用于连接的用户名
$password="";           //定义用于连接的密码
$link=mysql_connect($hostname,$username,$password);   //打开msql连接
mysql_query('set names gb2312;');      //转换编码以支持中文
mysql_select_db("test");         //选择操作库为test
$query="select * from friends";       //定义sql
$result=mysql_query($query);        //发送sql查询
while($rows=mysql_fetch_array($result))
{
  echo "id为:".$rows[id];
  echo "<br>www.111cn.netn";
  echo "name为:".$rows[name];
  echo "<br>n";
  echo "sex为:".$rows[sex];
  echo "<br>n";
  echo "birthday为:".$rows[birthday];
  echo "<br>n";
  echo "address为:".$rows[address];
  echo "<p>n";
}
//释放结果集
mysql_free_result($result);


//条件查询

$query="select * from friends where id=1";     //定义sql
$result= mysql_query($query);     //发送sql查询
echo mysql_result($result,0,"name");       //输出name结果
echo "<br>";
echo mysql_result($result,0,"birthday");      //输出birthday结果
echo "<br>";
echo mysql_result($result,0,"sex");       //输出sex结果
echo "<br>";
echo mysql_result($result,0,"address");      //输出address结果

//相关操作

$conn=mysql_connect('localhost','root','');       //打开连接
$fields=mysql_list_fields("test","friends",$conn);     //列出test库friends表的信息
$cols=mysql_num_fields($fields);        //获取结果数
for($i=0;$i<$cols;$i++)          //循环
{
  echo mysql_field_name($fields,$i)."n";       //输出字段名
  echo "<p>";
}


/*
总结

在php中查询数据库记录是相当简单且常用的,只要你记录上面几个函数就可以实现数据查询了。
*/

这里主要是讲关于在php中数据库连接与数据库选择以及显示当前数据库所有表三个实用函数,有需要的朋友可以看看。

$phps教程ql_user = "root";
$phpsql_password = "root";
$phpsql_loc = "";
$phpsql_db = "";


function phpsql_connect($location, $username, $password){
 global $phpsql_loc, $phpsql_user, $phpsql_password;
 if($phpsql_user != $username || $phpsql_password != $password)
 phpsql_error("cannot access to phpsql!(wrong username/wrong password)");
 define(phpsql_loc, $location);
 $phpsql_loc = $location;
}
function phpsql_select_db($db){
 global $phpsql_db;
 define(phpsql_db, $db);
 $phpsql_db = $db;
}
function phpsql_list_table(){
 global $phpsql_loc, $phpsql_db;
 $i = 0;
 if(!($handle = @opendir($phpsql_loc."/".$phpsql_db)))
 return 0;
 while(($file = readdir($handle)) !== false){
  if($file != "." && $file != "..")
  {
  $table[$i ++] = $file;
  }
 }
 return $table;
}

这里提供的数据库连接类程序,后面还提供了一个sql安全检测函数与sql语句完整性检测函数。*/

class db_mysql {
 var $connid;
 var $querynum = 0;
 var $expires;
 var $cursor = 0;
 var $cache_id = '';
 var $cache_file = '';
 var $cache_expires = '';
 var $halt = 0;
 var $result = array();

 function connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect = 0) {
  global $cfg;
  $this->expires = $cfg['db_expires'];
  $func = $pconnect == 1 ? 'mysql_pconnect' : 'mysql_connect';
  if(!$this->connid = $func($dbhost, $dbuser, $dbpw)) {
   $this->halt('can not connect to mysql server');
  }
  if($this->version() > '4.1' && $cfg['db_charset']) {
   mysql_query("set names '".$cfg['db_charset']."'" , $this->connid);
  }
  if($this->version() > '5.0') {
   mysql_query("set sql_mode=''" , $this->connid);
  }
  if($dbname) {
   if(!mysql_select_db($dbname , $this->connid)) {
    $this->halt('cannot use database '.$dbname);
   }
  }
  return $this->connid;
 }

 function select_db($dbname) {
  return mysql_select_db($dbname , $this->connid);
 }

 function query($sql , $type = '', $expires = 0, $save_id = false) {
        $sql=checksql($sql);
  if($type == 'cache' && stristr($sql, 'select')) {
   $this->cursor = 0;
   $this->cache_id = md5($sql);
   $this->result = array();
   $this->cache_expires = $expires ? $expires + mt_rand(-9, 9) : $this->expires;
   return $this->_query($sql);
  }
  if(!$save_id) $this->cache_id = 0;
  $func = $type == 'unbuffered' ? 'mysql_unbuffered_query' : 'mysql_query';
  if(!($query = $func($sql , $this->connid)) && $this->halt) {
   $this->halt('mysql query error', $sql);
  }
  $this->querynum++;
  return $query;
 }

 function get_one($sql, $type = '', $expires = 0) {
  $query = $this->query($sql, $type, $expires);
  $r = $this->fetch_array($query);
  $this->free_result($query);
  return $r ;
 }
 
 function counter($table, $condition = '', $type = '', $expires = 0) {
  global $cfg;
  $table = strpos($table, $cfg['tb_pre']) === false ? $cfg['tb_pre'].$table : $table;
  $sql = "select count(*) as num from {$table}";
  if($condition) $sql .= " where $condition";
  $r = $this->get_one($sql, $type, $expires);
  return $r ? $r['num'] : 0;
 }

 function fetch_array($query, $result_type = mysql_assoc) {
  return $this->cache_id ? $this->_fetch_array($query) : @mysql_fetch_array($query, $result_type);
 }

 function affected_rows() {
  return mysql_affected_rows($this->connid);
 }

 function num_rows($query) {
  return mysql_num_rows($query);
 }

 function num_fields($query) {
  return mysql_num_fields($query);
 }
 function escape_string($str){
  return mysql_escape_string($str);
 }
 function result($query, $row) {
  return @mysql_result($query, $row);
 }

 function free_result($query) {
  return @mysql_free_result($query);
 }

 function insert_id() {
  return mysql_insert_id($this->connid);
 }

 function fetch_row($query) {
  return mysql_fetch_row($query);
 }

 function version() {
  return mysql_get_server_info($this->connid);
 }

 function close() {
  return mysql_close($this->connid);
 }

 function error() {
  return @mysql_error($this->connid);
 }

 function errno() {
  return intval(@mysql_errno($this->connid)) ;
 }

 function halt($message = '', $sql = '') {
  global $cfg;
  if($message) {
   if($cfg['errlog']) {
    $log = "query:$sql|errno:".$this->errno()."|error:".$this->error()."|errmsg:$message";
    log_write($log, 'sql');
   }
  }
        showmsg("mysqlerror:$message",'-1');
        exit();
 }

 function _query($sql) {
  global $fr_time;
  $this->cache_file = cache_root.'/sql/'.substr($this->cache_id, 0, 2).'/'.$this->cache_id.'.php教程';
  if(!is_file($this->cache_file) || ($fr_time - @filemtime($this->cache_file) > $this->cache_expires)) {
   $tmp = array();
   $result = $this->query($sql, '', '', true);
   while($r = mysql_fetch_array($result, mysql_assoc)) {
    $tmp[] = $r;
   }
   $this->result = $tmp;
   $this->free_result($result);
   file_put($this->cache_file, "<?php /*".( $fr_time+$this->cache_expires)."*/ return ".var_export($this->result, true).";n?>");
  } else {
      $this->result = include $this->cache_file;
  }
  return $this->result;
 }

 function _fetch_array($query = array()) {
  if($query) $this->result = $query;
  if(isset($this->result[$this->cursor])) {
   return $this->result[$this->cursor++];
  } else {
   $this->cursor = $this->cache_id = 0;
   return array();
  }
 }
}

function checksql($dbstr,$querytype='select'){
 $clean = '';
 $old_pos = 0;
 $pos = -1;
 //普通语句,直接过滤特殊语法
 if($querytype=='select'){
  $nastr = "/[^0-9a-z@._-]{1,}(union|sleep|benchmark|load_file|outfile)[^0-9a-z@.-]{1,}/i";
  if(preg_match($nastr,$dbstr)){
            log_write($dbstr,'sql');
            showmsg('safeerror:10001', '网页特效:;');
            exit();
  }
 }
 //完整的sql检查
 while (true){
  $pos = strpos($dbstr, ''', $pos + 1);
  if ($pos === false){
   break;
  }
  $clean .= substr($dbstr, $old_pos, $pos - $old_pos);
  while (true){
   $pos1 = strpos($dbstr, ''', $pos + 1);
   $pos2 = strpos($dbstr, '', $pos + 1);
   if ($pos1 === false){
    break;
   }
   elseif ($pos2 == false || $pos2 > $pos1){
    $pos = $pos1;
    break;
   }
   $pos = $pos2 + 1;
  }
  $clean .= '$s$';
  $old_pos = $pos + 1;
 }
 $clean .= substr($dbstr, $old_pos);
 $clean = trim(strtolower(preg_replace(array('~s+~s' ), array(' '), $clean)));
 if (strpos($clean, 'union') !== false && preg_match('~(^|[^a-z])union($|[^[a-z])~s', $clean) != 0){
  $fail = true;
 }
 elseif (strpos($clean, '/*') > 2 || strpos($clean, '--') !== false || strpos($clean, '#') !== false){
  $fail = true;
 }
 elseif (strpos($clean, 'sleep') !== false && preg_match('~(^|[^a-z])sleep($|[^[a-z])~s', $clean) != 0){
  $fail = true;
 }
 elseif (strpos($clean, 'benchmark') !== false && preg_match('~(^|[^a-z])benchmark($|[^[a-z])~s', $clean) != 0){
  $fail = true;
 }
 elseif (strpos($clean, 'load_file') !== false && preg_match('~(^|[^a-z])load_file($|[^[a-z])~s', $clean) != 0){
  $fail = true;
 }
 elseif (strpos($clean, 'into outfile') !== false && preg_match('~(^|[^a-z])intos+outfile($|[^[a-z])~s', $clean) != 0){
  $fail = true;
 }
 elseif (preg_match('~([^)]*?select~s', $clean) != 0){
  $fail = true;
 }
 if (!empty($fail)){
        log_write($dbstr,'sql');
        showmsg('safeerror:10002', 'javascript:;');exit;
 }
 else
 {
  return $dbstr;
 }
}

[!--infotagslink--]

相关文章

  • mysql_connect与mysql_pconnect的区别详解

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

    这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
  • php语言实现redis的客户端

    php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
  • jQuery+jRange实现滑动选取数值范围特效

    有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
  • 详解Mysql中的JSON系列操作函数

    新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作,下面就实际体验一下...2016-08-23
  • JS实现的简洁纵向滑动菜单(滑动门)效果

    本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
  • 深入研究mysql中的varchar和limit(容易被忽略的知识)

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

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • jQuery+slidereveal实现的面板滑动侧边展出效果

    我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15
  • mysql的3种分表方案

    一、先说一下为什么要分表:当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。根据个人经验,mysql执行一个sql的过程如下:1...2014-05-31
  • PHP+jQuery翻板抽奖功能实现

    翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
  • SQLMAP结合Meterpreter实现注入渗透返回shell

    sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • 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
  • 用VirtualBox构建MySQL测试环境

    宿主机使用网线的时候,客户机在Bridged Adapter模式下,使用Atheros AR8131 PCI-E Gigabit Ethernet Controller上网没问题。 宿主机使用无线的时候,客户机在Bridged Adapter模式下,使用可选项里唯一一个WIFI选项,Microsoft Virtual Wifi Miniport Adapter也无法上网,故弃之。...2013-09-19
  • php cURL https链接报错:Unknown SSL protocol error in connection to

    cURL在php中用到的比较多了我们通常把它用于采集访问或数据模拟提交上了,但在用到https时我们使用常用的办法会提示报错:Unknown SSL protocol error in connection to...2016-11-25
  • PHP实现今天是星期几的几种写法

    复制代码 代码如下: // 第一种写法 $da = date("w"); if( $da == "1" ){ echo "今天是星期一"; }else if( $da == "2" ){ echo "今天是星期二"; }else if( $da == "3" ){ echo "今天是星期三"; }else if( $da == "4"...2013-10-04
  • 忘记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