PDO及PDO -> prepare的简单使用

<?php 

$host = 'localhost';
$user = 'root';
$pwd = '1234';
// sakila数据库是安装mysql时, 系统自带的一个示例数据库
$dbname = 'sakila';

// dsn的具体写法, 在PHP手册中搜索: PDO_MYSQL
$dsn = "mysql:host=$host;dbname=$dbname;port=3306";

// 连接数据库
$pdo = new PDO ( $dsn, $user, $pwd );

// 使用$pdo 直接执行sql语句
// $pdo -> query ( 'use sakila' );

// ?周围不用也不能加引号, 不用考虑sql注入
$sql = "SELECT * FROM actor WHERE actor_id IN ( ?, ?, ? )"; 
// 预编译sql
$stmt = $pdo -> prepare( $sql );
// 参数为数组, 第一个元素表示第一个问号的值, 类推
// 有几个?, 必须提供几个值, 不能多, 也不能少
$stmt -> execute( array ( 3, 8, 10 )); 

// 直接取全部出来
var_dump ( $stmt -> fetchAll () );

// 或者循环一条一条的取
// while ( $row = $stmt -> fetch () )
// {
// 	// TODO
// }

//另一个写法, 注意: 冒号方式和问号不能同用, 只能二选一
// :my_id 自己定义, 随便
$sql = "SELECT * FROM actor WHERE actor_id < :my_id"; 
$stmt = $pdo -> prepare( $sql );
// 执行查询
// 数组的键就是上面sql中的以冒号开头的字符串.
$stmt -> execute ( array ( ':my_id' => 5 )); 

var_dump ( $stmt -> fetchAll () );

// 关闭数据库连接
$pdo = null; 

//
// 以下简单封装一下.

class Db
{
	private static $pdo;

	public static function getPdo ()
	{
		if ( self::$pdo == null )
		{
			$host = 'localhost';
			$user = 'root';
			$pwd = '1234';
			$dbname = 'sakila';

			$dsn = "mysql:host=$host;dbname=$dbname;port=3306";
			$pdo = new PDO ( $dsn, $user, $pwd );
			self::$pdo = $pdo;
		}
		return self::$pdo;
	}

	public static function getStmt ( $sql )
	{
		$pdo = self::getPdo ();
		return $pdo -> prepare( $sql );
	}
}

$sql = "SELECT * FROM actor WHERE actor_id between ? and ?";
$stmt = Db::getStmt ( $sql );
$stmt -> execute ( array ( 10, 15 ));
var_dump ( $stmt -> fetchAll () );

$sql = "SELECT * FROM actor WHERE actor_id between :start and :end";
$stmt = Db::getStmt ( $sql );
$stmt -> execute ( array ( ':start' => 100, ':end' => 115 ));
var_dump ( $stmt -> fetchAll () );

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值