xsphp_pdo

<?php
   
         /*
		pdo 连接mysql

		pdo开启方法:

		windows:在pho.ini文件中,追加如下代码;
			extension=php_pdo.dll
			extension=php_pdo_mysql.dll   --使用mysql驱动
			extension=php_pdo_oci.dll    --使用oracle驱动
			extension=php_pdo_odbc.dll   --使用odbc驱动
			extension=php_pdo_mssql.dll    --使用sqlserver驱动
		linux:
		 安装源代码包时,向configure命令添加一下标志:
		 --with-pdo-mysql=/usr/local/mysql   //其中/usr/local/mysql为mysql安装目录。

	*/
	try {
		$dsn = 'mysql:dbname=xsphp;host=localhost';
		$user = 'root';
		$password = 'root';
		$opt = array(PDO::ATTR_PERSISTENT=>true,PDO::MYSQL_ATTR_INIT_COMMAND=>'set names gbk');
		$pdo = new PDO($dsn,$user,$password,$opt);
		var_dump($pdo);
	}catch(PDOException $e) {
		echo $e->getmessage();
	}
<?php
     /*
        使用exec()方法
    */
	try {
		$dsn = 'mysql:dbname=xsphp;host=localhost';
		$user = 'root';
		$pwd = 'root';
		$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND=>'set names gbk',PDO::ATTR_PERSISTENT=>true);
		$pdo = new PDO($dsn,$user,$pwd,$opt);
		//设置pdo错误处理模式
		/*
		    PDO::ERRMODE_SILENT 
            这是默认模式,如果出错,可以调用errorCode()和errorInfo()方法查看。

		    PDO::ERRMODE_WARNING 
			这是警告模式,除了设置错误代码以外,pdo还将发出一条php传统的E_WARNING消息。直接在网页上显示。
			PDO::ERRMODE_EXCEPTION ※※※※
			异常模式,除了设置错误代码以外,pdo还将抛出一个PDOExecption异常。
			一般都用此模式

		*/
		$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
	}catch(PDOException $e) {
		echo '数据库连接失败,失败原因:'.$e->getMessage();
		exit;
	}

	try {
		$sql = 'insert into users1 values(null,"gg",50)';
		$affected_row = $pdo->exec($sql);
		if($affected_row > 0) {
			echo '插入数据成功';
			echo "插入新数据的ID为{$pdo->lastInsertId()}";
		}else {
			echo '插入数据失败';
		}

	}catch(PDOException $e) {
		echo $e->getMessage();
	}
create table zhanghao (
	id	int primary key auto_increment,
	name varchar(20) not null,
	price int(10) not null
);

insert into zhanghao values(null,'yc',500);

insert into zhanghao values(null,'wy',1000);
mysql> select * from zhanghao;
+----+------+-------+
| id | name | price |
+----+------+-------+
|  1 | yc   |   500 |
|  2 | wy   |  1000 |
+----+------+-------+

2 rows in set (0.00 sec)

<?php

	/*
		pdo处理事务
		
		yc账户转入50,wy账户转出50

	*/

	try {
		$dsn = 'mysql:dbname=xsphp;host=localhost';
		$user = 'root';
		$pwd = 'root';
		$opt = array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION ,PDO::ATTR_PERSISTENT=>true);
		$pdo = new PDO($dsn,$user,$pwd,$opt);
		//关闭事务提交
		$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
	}catch(PDOException $e) {
		echo '连接数据库出错'.$e->getMessage();
		exit;
	}

	try{
		$pdo->beginTransaction(); //开启事务
		$price = 50; //转入转出金额
		//向yc账户转入50
		$sql = 'update zhanghao set price = price + '.$price.' where name = "yc"' ;
		$affected_row = $pdo->exec($sql);
		if(!$affected_row) {
			throw new PDOException('yc转入'.$price.'金额失败');
		}else {
			echo 'yc转入'.$price.'金额成功';
		}
		//wy账户转出50
		
		$sql = 'update zhanghao set price = price - '.$price.' where name = "wy"' ;
		$affected_row = $pdo->exec($sql);
		if(!$affected_row) {
			throw new PDOException('wy转出'.$price.'金额失败');
		}else {
			echo 'wy转出'.$price.'金额成功';
		}
		//提交事务
		$pdo->commit();  
	}catch(PDOException $e) {
		//回滚事务
		$pdo->rollback();
		echo $e->getMessage();
	}
	//重新开启事务提交
	$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1); 


/*
mysql> select * from zhanghao;
+----+------+-------+
| id | name | price |
+----+------+-------+
|  1 | yc   |   550 |
|  2 | wy   |   950 |
+----+------+-------+
2 rows in set (0.00 sec)
*/
mysql> select * from users1;
+----+------+-----+
| id | name | age |
+----+------+-----+
|  3 | gg   |  50 |
|  4 | gg   |  50 |
|  5 | gg   |  50 |
|  1 | yc   |  37 |
|  2 | yc   |  37 |
+----+------+-----+
5 rows in set (0.00 sec)
<?php

	/*
		使用pdo query()方法
		当执行返回结果集select查询时,使用pdo对象中的query()方法。返回一个pdoStatement对象。
		此对象相当于一个二维数组,直接遍历即可。
	*/

	try {
		$dsn = 'mysql:dbname=xsphp;host=localhost';
		$user = 'root';
		$pwd = 'root';
		$opt = array(PDO::ATTR_PERSISTENT=>true,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::MYSQL_ATTR_INIT_COMMAND => 'set names gbk');
		$pdo = new PDO($dsn,$user,$pwd,$opt);
	}catch(PDOException $e) {
		echo '数据库连接失败,'.$e->getMessage();
		exit;
	}

	try {
		$sql = 'select * from users1';
		$stmt = $pdo->query($sql);
		foreach($stmt as $row) {
			echo $row['id'].' ' . $row['name'].' '.$row['age'].'<br/>';
		}
	}catch(PDOException $e) {
		echo $e->getMessage();
	}

	/*
		使用pdo过滤一些特殊字符,防止一些能引起sql注入的代码。我们在pdo中使用quote()方法实现。
		例子如下:

	*/
	$query = 'select * from admin where user = '.$pdo->quote($_POST['user']).' and password = ' .$pdo->quote($_POST['password']);
<?php
	
	/*
		pdo对预处理语句的支持  insert update delete
	*/
	try {
		$dsn = 'mysql:dbname=xsphp;host=localhost';
		$user = 'root';
		$pwd = 'root';
		$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND=>'set names gbk',PDO::ATTR_PERSISTENT=>true,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION);
		$pdo = new PDO($dsn,$user,$pwd,$opt);
	}catch(PDOException $e) {
		echo '数据库连接出错,'.$e->getMessage();
		exit;
	}
		/*
			在pdo中有两种占位符的语法:命名参数和问号参数。
			使用哪种语法看个人喜好。
			命名参数相当于关联数组。
			问号参数相当于索引数组。
		*/
	try {
		$sql = 'insert into users1 values(null,?,?)';
//		$sql = 'insert into users1 values(null,:name,:age)';
		$stmt = $pdo->prepare($sql);
		/*
			问号参数绑定参数方法
		*/
		$stmt->bindParam(1,$name);
		$stmt->bindParam(2,$age);
		/*
			命名参数绑定参数方法
		*/
		/*
		$stmt->bindParam(':name',$name);
		$stmt->bindParam(':age',$age);
		*/
		$name = '那盒';
		$age = 303;
		if($stmt->execute()) {
			echo '执行成功';
		}else {
			echo '执行失败';
		}
	}catch(PDOException $e) {
		echo $e->getMessage();
	}
<?php
	
	/*
		pdo对预处理语句的支持  insert update delete
		不使用bindParam()方法,使用简便的方法。数组
	*/
	try {
		$dsn = 'mysql:dbname=xsphp;host=localhost';
		$user = 'root';
		$pwd = 'root';
		$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND=>'set names gbk',PDO::ATTR_PERSISTENT=>true,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION);
		$pdo = new PDO($dsn,$user,$pwd,$opt);
	}catch(PDOException $e) {
		echo '数据库连接出错,'.$e->getMessage();
		exit;
	}
		
	try {
//		$sql = 'insert into users1 values(null,?,?)';
		$sql = 'insert into users1 values(null,:name,:age)';
		$stmt = $pdo->prepare($sql);
		/*
			问号参数,参数传递
		
		if($stmt->execute(array('看看',60))) {
			echo '执行成功';
		}else {
			echo '执行失败';
		}
		*/

		/*
			命名参数,参数传递.需要传递一个关联数组
		*/
		if($stmt->execute(array(':name'=>'李四',':age'=>60))) {
			echo '执行成功';
		}else {
			echo '执行失败';
		}
	}catch(PDOException $e) {
		echo $e->getMessage();
	}
<?php

	/*
		pdo对预处理语句的支持  select
		使用fetch()方法
		
	*/

	try {
		$dsn = 'mysql:dbname=xsphp;host=localhost';
		$user = 'root';
		$pwd = 'root';
		$opt = array(PDO::ATTR_PERSISTENT=>true,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::MYSQL_ATTR_INIT_COMMAND=>'set names gbk');
		$pdo = new PDO($dsn,$user,$pwd,$opt);
	}catch(PDOException $e) {
		echo $e->getMessage();
		exit;
	}

	try{
		$sql = 'select * from users1';
		$stmt = $pdo->query($sql);
		/*
			PDO::FETCH_ASSOC:  从结果集中获取以列名为索引的关联数组

			PDO::FETCH_NUM :从结果集中获取一个以列在行中的数值偏移为索引的值的数值

			PDO::FETCH_BOTH (default):  这个是默认值,包含上面两种数组

			PDO::FETCH_BOUND: 使用fetch()返回true,并将获取的列值赋给在bindParam()方法中指定的相应变量

		*/
		while($row = $stmt->fetch(PDO::FETCH_NUM)) {
			foreach($row as $value) {
				echo $value.'  ';
			}
			echo '<br/>';
		}
	}catch(PDOException $e) {
		echo $e->getMessage();
		exit;
	}
<?php

	/*
		pdo对预处理语句的支持  select
		使用fetchAll()方法
		fetchAll方法与fetch方法类似,但是该方法只需要调用一次就可以获取结果集中所有的行,并赋给
		返回的二维数组。
		
	*/

	try {
		$dsn = 'mysql:dbname=xsphp;host=localhost';
		$user = 'root';
		$pwd = 'root';
		$opt = array(PDO::ATTR_PERSISTENT=>true,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::MYSQL_ATTR_INIT_COMMAND=>'set names gbk');
		$pdo = new PDO($dsn,$user,$pwd,$opt);
	}catch(PDOException $e) {
		echo $e->getMessage();
		exit;
	}

	try{
		$sql = 'select * from users1';
		$stmt = $pdo->prepare($sql);
		$stmt->execute();
		$result = $stmt->fetchALL(PDO::FETCH_ASSOC);
		/*
		foreach($result as $row) {
			foreach($row as $data) {
				echo $data.'--';
			}
			echo '<br/>';
		}
		*/
		foreach($result as $row) {
			echo $row['id'].' '.$row['name'].' '.$row['age'].'<br/>';
		}
	}catch(PDOException $e) {
		echo $e->getMessage();
		exit;
	}

	/*
		如果多次使用fetch()或fetchAll()。这时就可以使用pdostatement对象中的setFetchMode()方法。
		例子:
		$pdo->setFetchMode(PDO::FETCH_ASSOC);
	*/
<?php

	/*
		pdo对预处理语句的支持  select
		使用bindColumn()方法
		该方法可以将一个列和一个指定的变量名绑定。
		必须在fetch()方法的参数设置为PDO::FETCH_BOTH.
		经测试也可以不用设定
		
	*/

	try {
		$dsn = 'mysql:dbname=xsphp;host=localhost';
		$user = 'root';
		$pwd = 'root';
		$opt = array(PDO::ATTR_PERSISTENT=>true,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::MYSQL_ATTR_INIT_COMMAND=>'set names gbk');
		$pdo = new PDO($dsn,$user,$pwd,$opt);
	}catch(PDOException $e) {
		echo $e->getMessage();
		exit;
	}

	try{
		$sql = 'select id,name,age from users1';
		$stmt = $pdo->prepare($sql);
		$stmt->execute();
		$stmt->bindColumn(1,$id);
		$stmt->bindColumn(2,$name);
		$stmt->bindColumn(3,$age);
		while($stmt->fetch()) {
			echo $id.' '.$name.' '.$age.'<br/>';
		}
	}catch(PDOException $e) {
		echo $e->getMessage();
		exit;
	}












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值