11、 命名空间 PDO常用方法 sql预处理 静态延时绑定

2019年8月13日06:14:20 评论 20 次浏览

静态延时绑定

1、什么是静态延时绑定

自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类。
"后期绑定"的意思是说,static::不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为"静态绑定",因为它可以用于(但不限于)静态方法的调用。
我们需要一个在调用执行时才确定当前类的一个特征,就是说将static关键字对某个类的绑定推迟到调用执行时,就叫静态延迟绑定!
哪个类在运行,就代表哪个类
语法:

static::静态属性,静态方法,成员方法,类常量

2、实例:静态延时绑定演示

如果只有一个类,self和static都代表当前类
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定
如果在继承范围,self永远代码当前类,static代表最终执行的类
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

//定义一个学生类
class Student
{
    //声明一个类常量
    const TITLE = "localhost";
    //声明一个成员方法
    public function showInfo()
    {
        echo "主机名:".self::TITLE;
        echo "<br>主机名:".static::TITLE;
        echo "<br>姓名:".static::$name;
    }
}
//定义传智学生类,并继承学生类
class ItcastStudent extends Student
{
    //声明一个类常量
    const TITLE = "127.0.0.1";
    //声明一个静态属性
    public static $name = "张三四";
}
//创建传智学生类对象
$obj = new ItcastStudent();
//调用对象的showInfo()方法
$obj->showInfo();

命名空间概述

1、什么是命名空间

从广义上来说,命名空间是一种封装事物的方法。
在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。
在PHP中,命名空间用来解决在编写类库或应用程序时名称冲突的问题。
如果是使用其他人写的完整类库,如果类库中类名称跟自己的类名冲突,可以使用命名空间(自己的类可能很多地方都在用,改自己的其他地方都要改,其他类库,代码完善,也不好修改)
PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径。

2、定义命名空间的要求

PHP 在 5.3.0 以后的版本开始支持命名空间。
空间中可以包含任意合法的PHP代码,但只有三种代码受命名空间的影响,它们是:类,函数和常量
命名空间通过关键字namespace来声明。
命名空间必须是程序脚本的第一条语句。
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

4、实例:定义子命名空间

使用“\”斜线来分割子文件夹。例如:home\controller\a.txt
使用“\”斜线来分割子命名空间。例如:$obj = new Home\Controller\Student()
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

11、 命名空间 PDO常用方法 sql预处理  静态延时绑定
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定
命名空间可以拼接,第二个只要写本命名空间后面的空间就可以
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定
再加一个斜线就可以了,就是从根空间开始找

使用命名空间

1、文件系统中访问文件的方式

相对文件名形式,如foo.txt。它会被解析为 curdir/foo.txt
相对路径名形式,如subdir/foo.txt。它会被解析为 curdir/subdir/foo.txt。
绝对路径名形式,如/main/foo.txt。它会被解析为/main/foo.txt。

2、访问命名空间中元素的方式

非限定名称(不带任何前缀)。

$obj = new User(),//解析为 当前空间下的User()
$obj = new current\User()

限定名称(带相对空间前缀)。

$obj = new Home\User(),//解析为 当前空间下的Home\User()
$obj = new current\Home\User()

完全限定名称(从根空间开始)。

$obj = new \Home\User(),//解析为
$obj = new \Home\User()

11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

namespace关键字

关键字 namespace 可用来显式访问当前命名空间或子命名空间中的元素。它等价于类中的 self 操作符。
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

命名空间元素的导入和别名

1、描述

允许通过别名引用或导入外部的完全限定名称,是命名空间的一个重要特征。
PHP 命名空间支持两种使用别名或导入方式:为类名称使用别名,或为命名空间名称使用别名
在PHP中,导入是通过操作符 use 来实现的,别名是通过操作符as来实现的。
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

PDO概述

1、PDO简介

PDO是PHP数据对象(PHP Data Object)的缩写
PDO扩展为PHP访问不同数据库定义了一个轻量级的、一致性的接口;
PDO作用是统一各种数据库的访问接口,PDO让跨数据库的使用更具亲和力;
有了PDO,您不必再使用mysqli_函数、oci_函数或者mssql_*函数,也不必再为它们封装数据库操作类,只需要使用PDO接口中的方法就可以对各种数据库进行操作。
PDO是一个第三方的类,默认已经集成到PHP中了。

2、PDO的访问流程图

11、 命名空间 PDO常用方法 sql预处理  静态延时绑定
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

3、创建PDO类的对象

描述:创建一个表示数据库连接的 PDO 对象。
语法:

PDO::__construct ( string $dsn [, string $username [, string $password]] )

参数:

$dsn,数据源名称或叫做 DSN,包含了请求连接到数据库的信息。通常,一个 DSN 由 PDO 驱动名、紧随其后的冒号、以及具体 PDO 驱动的连接语法组成。
例如:

$dsn = “mysql: host=127.0.0.1; port=3306; dbname=db; charset=utf8”

\(username,数据库用户名。
\)password,数据库密码。
返回值:成功则返回一个PDO对象。

11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

PDO对象常用方法

1、PDO::exec()方法

描述:执行一条 SQL 语句,并返回受影响的行数 适用于增,删,改
语法:

int PDO::exec ( string $sql )

参数:$sql要被预处理和执行的 SQL 语句。
注意:不会从SELECT语句返回结果
返回:返回受修改或删除 SQL 语句影响的行数。如果没有受影响的行,则返回 0
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=itcast;charset=utf8";
$username = "root";
$password = "root";

//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);

//执行插入的SQL语句
$sql = "INSERT INTO student VALUES(null,'刘东明',1,default,'大专',6000,400,'山东省')";
$records = $pdo->exec($sql);
echo "成功插入了{$records}条记录!";

2、PDO::query()方法

描述:执行一条SQL语句,返回一个结果集对象( PDOStatement )
语法:

public PDOStatement PDO::query ( string $statement )

提示:主要用于SELECT、SHOW语句。
返回:执行成功返回PDOstatement结果集对象,执行失败返回FALSE。
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=itcast;charset=utf8";
$username = "root";
$password = "root";

//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);

//执行查询的SQL语句,返回结果集对象(PDOStatement类)
$sql = "SELECT * FROM student ORDER BY id DESC";
$PDOStatement = $pdo->query($sql);
var_dump($PDOStatement);

3、PDO::lastInsertId()方法

描述:返回最后插入行的ID或序列值
语法:

string PDO::lastInsertId ( void )

返回:返回最后插入行的ID
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=itcast;charset=utf8";
$username = "root";
$password = "root";

//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);

//执行插入的SQL语句
$sql = "INSERT INTO student(name,salary,bonus,city) VALUES('刘芒芒',8000,400,'安徽省')";
$pdo->exec($sql);
//获取最后插入成功的记录的id
$id = $pdo->lastInsertId();
echo "最后插入成功的记录ID是:{$id}";

4、PDO::setAttribute()方法

描述:设置数据库句柄属性
语法:

bool PDO::setAttribute ( int $attribute , mixed $value )

提示:PDO内置了一些可用的通用属性(详细见手册)
PDO::ATTR_CASE:强制列名为指定的大小写。
PDO::ATTR_ERRMODE:错误报告
PDO::ATTR_DEFAULT_FETCH_MODE: 设置默认的提取模式。
PDO::FETCH_ASSOC :返回索引数组
PDO::FETCH_BOTH :返回两种下标
PDO::FETCH_NUM :返回数字下标

返回:成功时返回 TRUE, 或者在失败时返回 FALSE。
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=itcast;charset=utf8";
$username = "root";
$password = "root";

//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);
//设置PDO属性:设置从结果集提取数组的类型为关联数组
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

//执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
$sql = "SELECT * FROM student";
$PDOStatement = $pdo->query($sql);

//遍历结果集对象,取出每一行数据(一维数组)
foreach($PDOStatement as $arr)
{
    print_r($arr);
}

PDOStatement对象常用方法

1、PDOStatement::fetch()方法

描述:从结果集中获取一行,并向下移动指针
语法:

mixed PDOStatement::fetch ([ int $fetch_style ] )

参数:$fetch_style,控制下一行如何返回给调用者。
PDO::FETCH_ASSOC,返回一个索引为结果集列名的数组
PDO::FETCH_BOTH(默认),返回一个索引为结果集列名和以0开始的列号的数组
PDO::FETCH_NUM:返回一个索引为以0开始的结果集列号的数组
返回:此函数(方法)成功时返回的值依赖于提取类型。在所有情况下,失败都返回 FALSE 。

11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=itcast;charset=utf8";
$username = "root";
$password = "root";

//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);

//执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
$sql = "SELECT * FROM student";
$PDOStatement = $pdo->query($sql);

//从结果集对象循环取出所有行数据
while($arr = $PDOStatement->fetch(PDO::FETCH_ASSOC))
{
    print_r($arr);  
}

2、PDOStatement::fetchAll()方法

描述:返回一个包含结果集中所有行的数组
语法:array PDOStatement::fetchAll ([ int \(fetch_style ] )
参数:\)fetch_style,控制下一行如何返回给调用者。
PDO::FETCH_ASSOC,返回一个索引为结果集列名的数组
PDO::FETCH_BOTH(默认),返回一个索引的数组
PDO::FETCH_NUM:返回一个索引为以0开始的结果集列号的数组
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=itcast;charset=utf8";
$username = "root";
$password = "root";

//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);

//执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
$sql = "SELECT * FROM student";
$PDOStatement = $pdo->query($sql);

//从结果集对象获取多行数据
$arrs = $PDOStatement->fetchAll(PDO::FETCH_ASSOC);
print_r($arrs);

3、PDOStatement::rowCount()方法

描述:返回受上一个 SQL 语句影响的行数
语法:

int PDOStatement::rowCount ( void )

返回:返回上一个由对应的 PDOStatement 对象执行SELECT、DELETE、 INSERT、或 UPDATE 语句受影响的行数。
提示:要想使用该函数,必须使用 $pdo->query() 返回 PDOStatement 对象
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=itcast;charset=utf8";
$username = "root";
$password = "root";

//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);

//执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
$sql = "SELECT * FROM student";
$PDOStatement = $pdo->query($sql);

//获取查询记录数
$records = $PDOStatement->rowCount();
echo "总记录为{$records}条!";

PDO错误处理

1、PDO支持三种错误模式

静默模式(Silent):错误发生后,不会主动报错,是默认的模式;
警告模式(Warning):错误发生后,通过PHP标准来报告错误;
异常模式(Exception):错误发生后,抛出异常,需要捕捉和处理;
提示:可以通过 PDO::setAttribute() 更改错误模式。

2、静默模式(Slient)

在静默模式下,当有错误发生时,不会显示在页面上;
此时,可以通过PDO的PDO::errorCode()和PDO::errorInfo()两个方法,来获取错误信息。
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=itcast;charset=utf8";
$username = "root";
$password = "root";

//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);

//执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
$sql = "SELECT * FROM student WHERE id=abc";
$PDOStatement = $pdo->query($sql);

//获取错误信息
echo "错误编号:".$pdo->errorCode();
echo "<br>错误信息:";
print_r($pdo->errorInfo());

3、警告模式(Warning)

因为默认报错模式是静默模式(silent),如果想报警告错误,必须使用setAttribute()方法提前设置。
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=itcast;charset=utf8";
$username = "root";
$password = "root";

//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);
//设置错误报告模式为:警告模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

//执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
$sql = "SELECT * FROM student WHERE id=abc";
$PDOStatement = $pdo->query($sql);

4、异常模式(Exception)

因为默认报错模式是静默模式(silent),如果想报异常错误,必须使用setAttribute()方法提前设置。
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=itcast;charset=utf8";
$username = "root";
$password = "root";

//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);
//设置错误报告模式为:异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try{
    //执行查询的SQL语句,执行成功返回结果集对象(PDOStatement类)
    $sql = "SELECT * FROM student WHERE id=abc";
    $PDOStatement = $pdo->query($sql);
}catch(Exception $error)
{
    //输出异常信息
    echo "错误编号:".$error->getCode();
    echo "<br>错误行号:".$error->getLine();
    echo "<br>错误文件:".$error->getFile();
    echo "<br>错误信息:".$error->getMessage();
}

SQL语句预处理

1、SQL语句执行过程

SQL语句的执行,分成两个阶段:编译和执行
如果SQL语句,是第1次执行,先编译再执行。编译过程十分复杂,耗用系统资源,相对不太安全;
如果SQL语句(即相同的SQL语句),是第2次执行,直接从缓存中读取,无疑执行效率是较高的,也是比较安全的,可以有效避免SQL注入等安全问题;
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

2、PDO的SQL语句预处理步骤

(1)PDO完成预处理需要的步骤

先提取相同结构的sql部分!(将数据部分,可变的部分去掉)
编译这个相同的结构!将编译结果保存!
再将不同的数据部分进行替换!
执行即可!

(2)提取相同结构的SQL语句

在SQL语句中,使用命名参数和问号参数,来代替可变的数据。
使用占位符“:value”和“?”来代替可变的数据。
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

(3)预编译相同结构的SQL语句

描述:执行预编译的SQL语句结构,并返回一个PDOStatement对象。
语法:

public PDOStatement PDO::prepare ( string $statement )

返回:执行成功返回PDOStatement对象,失败返回FALSE。
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

(4)给占位符绑定数据

描述:绑定一个值到预处理的 SQL 语句中的对应命名占位符或问号占位符。
语法:

bool PDOStatement::bindValue ( mixed $parameter , mixed $value )

参数:
$parameter,参数标识符。对于使用命名占位符的预处理语句,应是类似 :name 形式的参数名。对于使用问号占位符的预处理语句,应是以1开始索引的参数位置。
$value,绑定到参数的值;
返回:成功时返回 TRUE, 或者在失败时返回 FALSE。
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

(5)执行预处理的SQL语句

描述:执行一条预处理语句
语法:

bool PDOStatement::execute( )

返回:成功时返回 TRUE, 或者在失败时返回 FALSE。
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

3、实例:PDO的SQL语句预处理

11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

//数据库配置信息
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=itcast;charset=utf8";
$username = "root";
$password = "root";

//创建PDO类的对象
$pdo = new PDO($dsn,$username,$password);

//制作相同结构的SQL语句,数据部分用占位符代替
$sql = "INSERT INTO student(name,salary,bonus,city) VALUES(?,?,?,?)";

//预编译相同结构的SQL语句(含有占位符)
$PDOStatement = $pdo->prepare($sql);

//给问号(?)占位符绑定数据:1对应第1个问号,2对应第2个问号,以此类推...
$PDOStatement->bindValue(1,'张四五');
$PDOStatement->bindValue(2,9000);
$PDOStatement->bindValue(3,900);
$PDOStatement->bindValue(4,'山西省');

//执行绑定数据预处理SQL语句
$PDOStatement->execute();

课后总结 Xmind

11、 命名空间 PDO常用方法 sql预处理  静态延时绑定
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定
11、 命名空间 PDO常用方法 sql预处理  静态延时绑定

继续阅读
weinxin
加我微信
微信扫一扫,加我微信好友,共同交流,共同进步! (备注:焦国强博客)
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: