1.操作其它数据库
(1)造对象
1
|
$dsn
=
"mysql:dbname=test3;host=localhost"
;
//数据源:两个参数:数据库驱动,链接数据库
|
1
|
$pdo
=
new
PDO(
$dsn
,
"root"
,
"123"
);
//数据源,数据库名,密码
|
(2)写sql语句
1
|
1.
$sql
=
"select * from productor"
;
//查询这个表中的所有数据<br>2. $sql = " insert into productor values('p006','随便')"; //增删改语句
|
(3)执行语句:这里就和MySQLi()的不同之处了
1
2
3
4
|
1.
$a
=
$pdo
->query(
$sql
);
//执行查询语句:用query();
//输出的是关联数组:fetch是输出一条数据, fetch_all是输出所有的数据;PDO::FETCH_ASSOC也有几个常用的:BOTH是关联和索引数组都有,ASSOC第关联数组,NUM是索引数组
$arr
=
$a
->fetch(PDO::FETCH_ASSOC);
var_dump(
$arr
);
|
1
2
|
2.
$a
=
$pdo
->
exec
(
$sql
);
//执行其他语句:用exec();
var_dump(
$a
);
|
这样就是已经添加进数据库了 :
2.事务功能
事务:能够控制语句同时成功同时失败,失败时可以回滚
(1)造对象(上面已有)
(2)设置异常模式
1
|
$pdo
->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//直接拿过来用
|
(3)开始写事务:语句一起执行,其中只要有一条语句是错误的,就回滚到最开始,并且没有真正执行写入数据库中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
try
{
//开启事务
$pdo
->beginTransaction();
$sql1
=
"insert into productor values('p007','en')"
;
//是可以添加的
$sql2
=
"insert into productor values('p008','we')"
;
$sql3
=
"insert into productor values('p005','gh')"
;
//是不能添加的,也就是错误语句
$pdo
->
exec
(
$sql1
);
$pdo
->
exec
(
$sql2
);
$pdo
->
exec
(
$sql3
);<br>
//提交
$pdo
->commit();
//正真的写入到数据库中
}
catch
(Exception
$e
)
{
//抓住try里面出现的错误,并且处理
echo
$e
->getMessage();
//获取异常信息<br>
//回滚:回到语句最开始
$pdo
->rollBack();
}
|
3.防止sql注入攻击
(1)?占位符:数组必须是索引数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/SQL语句里面需要加占位符 ?
$sql
=
"select * from nation where code=?"
;
//$sql = "insert into nation values(?,?)";
//准备执行,返回PDOStatement对象
$st
=
$pdo
->prepare(
$sql
);
//1.调用绑定参数的方法来绑定参数:绑定的参数必须定义
//$st->bindParam(1,$code); //前两参数必须写:占位符位置,绑定的参数
//$st->bindParam(2,$name);
//2.索引数组
$attr
=
array
(
""
,
""
);
//$code,$name
//执行方法
$st
->execute(
$attr
);
|
(2)字符串方式:数组必须是关联数组
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//占位符是字符串
$sql
=
"insert into nation values(:code,:name)"
;
//准备执行
$st
=
$pdo
->prepare(
$sql
);<br><br>
//1.调用绑定参数参数
//$st->bindParam(":code",$code,PDO::PARAM_STR); //前三个参数必须要:字符串,定义的绑定,类型
//$st->bindParam(":name",$name,PDO::PARAM_STR);
//$code = "n007";
//$name = "测试3";
//2.关联数组
$attr
=
array
(
"code"
=>
"n008"
,
"name"
=>
"测试4"
);
$st
->execute(
$attr
);
|