点击打开链接
- <?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 () );