php pdo连接并查询sql数据库代码

 更新时间:2016年11月25日 16:39  点击:1784

$login = "root";
$passwd = "mysql教程";
try{
  $db=new pdo('mysql:host=localhost;dbname=mysql',$login,$passwd);
  foreach($db->query('select * from test') as $row){
  print_r($row);
  }
  $db=null;
}catch(pdoexception $e){
  echo $e->getmessage();
}

看一个高级一点的

$dbms='mysql'; //数据库类型 oracle 用odi,对于开发者来说,使用不同的数据库,只要改这个,不用记住那么多的函数了
$host='localhost'; //数据库主机名
$dbname='test'; //使用的数据库
$user='root'; //数据库连接用户名
$pass=''; //对应的密码
$dsn="$dbms:host=$host;dbname=$dbname";
class db extends pdo {  
 public function __construct(){       
 try {            
 parent::__construct("$globals[dsn]", $globals['user'], $globals['pass']);        
 } catch (pdoexception $e) {        
  die("error: " . $e->__tostring() . "<br/>");      
  }   
  }       
 public final function query($sql){       
 try {          
  return parent::query($this->setstring($sql));       
  }catch (pdoexception $e){           
  die("error: " . $e->__tostring() . "<br/>");      
   }   
   }       
   private final function setstring($sql){       
   echo "我要处理一下$sql";       
   return $sql;    }}
   $db=new db();
   $db->setattribute(pdo::attr_case, pdo::case_upper);
   foreach ($db->query('select * from xxxx_menu') as $row) {   
   print_r($row);
   }
   $db->exec('delete from `xxxx_menu` where mid=43');

/*
关于pdo说明

pod(php data object)扩展在php5中加入,php6中将默认识用pdo连接数据库,所有非pdo扩展将会在php6被从扩展中移除。该扩展提供php内置类 pdo来对数据库进行访问,不同数据库使用相同的方法名,解决数据库连接不统一的问题。
我是配置在windows下做开发用的。
■pdo的目标

提供一种轻型、清晰、方便的 api
统一各种不同 rdbms 库的共有特性,但不排除更高级的特性。
通过 php 脚本提供可选的较大程度的抽象/兼容性。
■pdo的特点:

性能。pdo 从一开始就吸取了现有数据库扩展成功和失败的经验教训。因为 pdo 的代码是全新的,所以我们有机会重新开始设计性能,以利用 php 5 的最新特性。
能力。pdo 旨在将常见的数据库功能作为基础提供,同时提供对于 rdbms 独特功能的方便访问。
简单。pdo 旨在使您能够轻松使用数据库。api 不会强行介入您的代码,同时会清楚地表明每个函数调用的过程。
运行时可扩展。pdo 扩展是模块化的,使您能够在运行时为您的数据库后端加载驱动程序,而不必重新编译或重新安装整个 php 程序。例如,pdo_oci 扩展会替代 pdo 扩展实现 oracle 数据库 api。还有一些用于 mysql、postgresql、odbc 和 firebird 的驱动程序,更多的驱动程序尚在开发。
*/

这是一个完整理的php+mysql+ajax的用户注册实例程序,可以提供检测用户名是否被注册,这样可以增强用户体验哦,在你填写好用户名后就会提供你当前所有注册的用户是否己经被注册了。

本程序包括三个文件

reg.html 用户注册html页面
reg.php php处理代码
conn.php 数据库教程连接文件


reg.html代码

 代码如下 复制代码

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<title>php+ajax用户注册验证用户是否在存(php mysql完整实例)</title>
<style type="text/css教程">
body{
 font-size:12px;
 text-align:center;
}
.text{
 width:180px;
 height:12px;
}
p{
 width:600px;
 height:20px;
 line-height:20px;
 text-align:left;
}
p label{
 display:block;
 width:80px;
 height:20px;
 line-height:20px;
 float:left;
 text-align:right;
}
p span{
 margin-left:10px;
}
</style>
</head>
<body>
<script language="网页特效">
function createxmlhttprequest(){
 var xmlhttp;
 if(window.activexobject){
  xmlhttp = new activexobject("microsoft.xmlhttp");
 }else if(window.xmlhttprequest){
  xmlhttp = new xmlhttprequest();
 }
 return xmlhttp;
}

function checkname(){
 var name = document.getelementbyid('name'); //获取用户名文本框
 var span = document.getelementbyid('name_info'); //获取用于显示结果的span标记
 if(name.value.length <= 4){
  span.style.color = '#ff0000'; //设置span标记内的字体颜色为红色
  span.innerhtml = '用户名长度不能少于4个字符!'; //span标记内容
  return false;
 }
 var xmlhttp = createxmlhttprequest();//创建异步请求对象
 var time = new date().gettime();
 var url = 'reg.php?act=reg&name=' + name.value.tolowercase() + '&tmp=' + time;//构造出请求地址
 xmlhttp.open("get",url,true); //建立一个异步请求
 /*这里我们使用get方式请求
   post方式的请求基本差不多,朋友们自己试试如果不行,在下面给我留言*/
 xmlhttp.onreadystatechange = function(){ //监视请求状态
  span.style.color = '#ff9900';
  span.innerhtml = '查询中,请稍候!';
  if(xmlhttp.readystate == 4 && xmlhttp.status == 200){
   if(xmlhttp.responsetext.indexof('no') != -1){ //如果服务器返回的信息中有no
    span.style.color = '#cb2121'; //设置span标记颜色为红色
    span.innerhtml = '用户名[' + name.value + ']已经被别的用户使用!';
   }else{//如果返回信息中没有no
    span.style.color = '#00a800';//设置颜色为绿色
    span.innerhtml = '恭喜您,该用户名未被注册!';
   }
   return true;
   delete xmlhttp; //删除请求对象
  }
 }
 xmlhttp.send(null); //发送请求
}
</script>
<form method="post" action="reg.php">
<p><label>用户名:</label><input type="text" class="text" id="name" name="user_name"/><span id="name_info"></span></p>
<p><label></label><input type="button" value="检查用户名" onclick="checkname()"/></p>
<p><label>密码:</label><input type="password" class="text" /></p>
<p><label>&nbsp;</label><input type="submit" value="注册" /></p>
</form>
</body>
</html>

reg.php文件

 代码如下 复制代码


<?php

include("conn.php");
$name=$_get['name'];
$name=urldecode($name);

if(strlen($name)>0){
 $sql="select username from registration where username = '$name'";
 $result=mysql_query($sql);
 $row=mysql_fetch_array($result);
 
 if($_get['act'] == 'reg'){
  if(!empty($row['username'])){ //只要注册用户名为kaixin的时候,注册页面就会用红色字体提示次用户已被注册!
  echo 'no';
  }else{
  echo 'yes';
  }
 }
}
?>

conn.php数据库文件

 代码如下 复制代码
<?php
/* created on 下午12:08:25*/
 $conn=@mysql_connect("localhost","root","")or die("111cn.net提示你:连接失败!");
 mysql_select_db("reg",$conn);
 mysql_query("set names 'gbk'");
?>

registration数据表结构

-- phpmyadmin sql dump
-- version 2.11.2.1
-- http://www.phpmyadmin.net
--
-- 主机: localhost
-- 生成日期: 2009 年 05 月 20 日 05:29
-- 服务器版本: 5.0.45
-- php 版本: 5.2.5

set sql_mode="no_auto_value_on_zero";

--
-- 数据库: `reg`
--

-- --------------------------------------------------------

--
-- 表的结构 `registration` phpmyadmin导入数据
--

 代码如下 复制代码

create table `registration` (
  `id` tinyint(6) not null auto_increment,
  `username` varchar(14) not null comment '注册用户名',
  `userpwd` varchar(14) not null comment '注册密码',
  primary key  (`id`)
) engine=innodb  default charset=gb2312 auto_increment=6 ;

--


-- 导出表中的数据 `registration`
--

 代码如下 复制代码

insert into `registration` (`id`, `username`, `userpwd`) values
(1, 'admin', 'admin888'),
(2, 'lyn', '111cn.net'),
(3, 'xiaot', 'xiaot'),
(4, 'xiaoe', 'xiaoe'),
(5, '我爱www.111cn.net', '5201314110');

 

 代码如下 复制代码

class cls_mysql{
var $querynum = 0;
var $link;
var $histories;

var $dbhost;
var $dbuser;
var $dbpw;
var $dbcharset;
var $pconnect;
var $tablepre;
var $time;

var $goneaway = 5;

function connect($dbhost, $dbuser, $dbpw, $dbname = '', $dbcharset = '', $pconnect = 0, $tablepre='', $time = 0) {
$this->dbhost = $dbhost;
$this->dbuser = $dbuser;
$this->dbpw = $dbpw;
$this->dbname = $dbname;
$this->dbcharset = $dbcharset;
$this->pconnect = $pconnect;
$this->tablepre = $tablepre;
$this->time = $time;

if($pconnect) {
if(!$this->link = mysql_pconnect($dbhost, $dbuser, $dbpw)) {
$this->halt('can not connect to mysql server');
}
} else {
if(!$this->link = mysql_connect($dbhost, $dbuser, $dbpw)) {
$this->halt('can not connect to mysql server');
}
}

if($this->version() > '4.1') {
if($dbcharset) {
mysql_query("set character_set_connection=".$dbcharset.", character_set_results=".$dbcharset.", character_set_client=binary", $this->link);
}

if($this->version() > '5.0.1') {
mysql_query("set sql_mode=''", $this->link);
}
}

if($dbname) {
mysql_select_db($dbname, $this->link);
}

}

function fetch_array($query, $result_type = mysql_assoc) {
return mysql_fetch_array($query, $result_type);
}

function result_first($sql) {
$query = $this->query($sql);
return $this->result($query, 0);
}

function fetch_first($sql) {
$query = $this->query($sql);
return $this->fetch_array($query);
}

function fetch_all($sql, $id = '') {
$arr = array();
$query = $this->query($sql);
while($data = $this->fetch_array($query)) {
$id ? $arr[$data[$id]] = $data : $arr[] = $data;
}
return $arr;
}

function cache_gc() {
$this->query("delete from {$this->tablepre}sqlcaches where expiry<$this->time");
}

function query($sql, $type = '', $cachetime = false) {
$func = $type == 'unbuffered' && @function_exists('mysql_unbuffered_query') ? 'mysql_unbuffered_query' : 'mysql_query';
if(!($query = $func($sql, $this->link)) && $type != 'silent') {
$this->halt('mysql query error', $sql);
}
$this->querynum++;
$this->histories[] = $sql;
return $query;
}

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

function error() {
return (($this->link) ? mysql_error($this->link) : mysql_error());
}

function errno() {
return intval(($this->link) ? mysql_errno($this->link) : mysql_errno());
}

function result($query, $row) {
$query = @mysql_result($query, $row);
return $query;
}

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

function num_fields($query) {
return mysql_num_fields($query);
}

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

function insert_id() {
return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("select last_insert_id()"), 0);
}

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

function fetch_fields($query) {
return mysql_fetch_field($query);
}

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

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

function halt($message = '', $sql = '') {
$error = mysql_error();
$errorno = mysql_errno();
if($errorno == 2006 && $this->goneaway-- > 0) {
$this->connect($this->dbhost, $this->dbuser, $this->dbpw, $this->dbname, $this->dbcharset, $this->pconnect, $this->tablepre, $this->time);
$this->query($sql);
} else {
$s = '<b>error:</b>'.$error.'<br />';
$s .= '<b>errno:</b>'.$errorno.'<br />';
$s .= '<b>sql:</b>:'.$sql;
exit($s);
}
}
}

/*
速度和效率。使用存储过程的速度显然更快。在效率上,如果应用一次需要做一系列sql操作,则需要往返于php与oracle,不如把该应用直接放到数据库教程方以减少往返次数,增加效率。但是在internet应用上,速度是极度重要的,所以很有必要使用存储过程
*/

//建立一个test表

create table test (

id number(16) not null,

name varchar2(30) not null,

primary key (id)

);

//插入一条数据

insert into test values (5, 'php/index.html>php_book');

//建立一个存储过程

create or replace procedure proc_test (

p_id in out number,

p_name out varchar2

) as

begin

select name into p_name

from test

where id = 5;

end proc_test;

/

--------------------------------------------------------------------------------

php/index.html>php代码:--------------------------------------------------------------------------------


//建立数据库连接

$user = "scott"; //数据库用户名

$password = "tiger"; //密码

$conn_str = "tnsname"; //连接串(cstr : connection_string)

$remote = true //是否远程连接

数据库连接是一种有限的昂贵的资源,数据库连接影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。


/*
 * created on 2010-3-8
 * make by:suniteboy
 * my first mysql class
 *
 */

 class mysql{
 private $server   ="";
 private $user     ="";
 private $pwd      ="";
 private $database ="";
 private $linkmode = 1; //连接模式,0表示普通连接,1表示永久连接
 private $conn     = 0;
 private $sql      =""; //sql语句
 private $result   =""; //query查询结果
 private $record   =""; //保存记录

 //============================================
 // 构造函数
 //============================================
 public function __construct($server,$user,$pwd,$database,$charset="utf8",$linkmode=0)
 {
  if(empty ( $server )| empty( $user ) | empty( $database ))
  {
   $this->show_error("连接信息不完整,请检查是否提供了服务器地址,用户名以及连接的数据库信息");
   return 0;
  }
  $this->server = $server;
  $this->user = $user;
  $this->pwd = $pwd;
  $this->database = $database;
  $this->charset = $charset;
  $this->linkmode = $linkmode;
  $this->connect();
 }

 //============================================
 // 连接函数
 //============================================
 public function connect()
 {
  $this->conn = $this->linkmode?mysql_pconnect($this->server,$this->user,$this->pwd):
  mysql_connect($this->server,$this->user,$this->pwd);
  if(!$this->conn)
  {
   $this->show_error('无法连接服务器');
   return 0;
  }

  if(!mysql_select_db($this->database))
  {
   $this->show_error('无法连接数据库'.$this->database);
   return 0;
  }
// $this->query('set names '.$this->charset);
 return $this->conn;

 }
 //============================================
 // mysql查询函数
 //============================================
 public function query($sql)
 {
  if(empty($sql))
  {
   $this->show_error('sql语句为空');
   return 0;
  }
  $this->sql = preg_replace('/ {2,}/',' ',trim($sql));
  $this->result = mysql_query($this->sql,$this->conn);
  if(!$this->result)
  {
   $this->show_error('sql语句错误',true);
   return 0;
  }
  return $this->result;
 }

 //============================================
 // 函数
 //============================================
 public function select_db($dbname)
 {
  return mysql_select_db($dbname);
 }

 public function fetch_array($query,$result_type=mysql_assoc)
 {
  return mysql_fetch_array($query,$result_type);
 }

 public function fetch_row($query)
 {
  return mysql_fetch_row($query);
 }
 //============================================
 // 取得前一次mysql操作所影响到的记录行数
 //============================================
 public function affected_rows()
 {
  return mysql_affected_rows();
 }
 public function num_fields($query)
 {
  return mysql_num_fields($query);
 }

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

 public function insert_id()
 {
  return mysql_insert_id();
 }

 public function close()
 {
  return mysql_close();
 }
 //============================================
 // 从记录中取出一条结果
 //============================================
 public function getone($sql)
 {
  $res = $this->query($sql);
  if($res!==false)
  {
   $row = mysql_fetch_row($res);
   if($row!==false)
   {
    return $row;
   }
   else
   {
    return '';
   }
  }
  else
  {
   return false;
  }
 }

 //============================================
 // 从记录中取出所有结果
 //============================================
 public function getall($sql)
 {
  $res = $this->query($sql);
  if($res!==false)
  {
   $arr = array();
   while($row = mysql_fetch_assoc($res))
   {
    $arr[] = $row;
   }
   return $arr;
  }
  else
  {
   return false;
  }
 }

 //============================================
 // 错误提示函数
 //============================================
 public function show_error($msg='',$sql=false)
 {
  $err = '['.mysql_errno().']'.mysql_error();
  if($sql) $sql='sql语句:'.$this->sql;
  if($msg=='')
  {
   echo $err;
   echo "</br>";
  }
  elseif($sql &&$msg)
  {
   echo $msg;
   echo "</br>";
   echo $sql;
  }
  else
  {
   echo $msg;
   echo "</br>";
  }

 }

 }

[!--infotagslink--]

相关文章

  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • Mybatis Plus select 实现只查询部分字段

    这篇文章主要介绍了Mybatis Plus select 实现只查询部分字段的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • MyBatisPlus-QueryWrapper多条件查询及修改方式

    这篇文章主要介绍了MyBatisPlus-QueryWrapper多条件查询及修改方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2022-06-27
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23