题目1:预处理第1种方案:匿名参数+索引数组
1.demo1.php文件:
<?php
// *预处理第1种方案:匿名参数+索引数组
namespace _221124a;
use PDO;
// *连接
$db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
// *sql语句:CURD(增删改查):insert
$sql="INSERT INTO staff(`name`,`sex`,`eamil`)VALUES(?,?,?)";
// $sql = 'INSERT `staff` SET `name`= ?,`sex`= ?,`email`= ?;';
// *对sql语句进行预处理
$stmt=$db->prepare($sql);
// *放入实参
$data=['刘备',0,'liubei@qq.com'];
//* 执行sql
$stmt->execute($data);
//* 验证: 打印sql预处理命令(正式运行时注释掉)
$stmt->debugDumpParams();
echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
2.浏览器效果图:
题目2:预处理第2种方案:命名参数+关联数组
1.demo2.php文件:
<?php
// *预处理第2种方案:命名参数+关联数组
namespace _221124b;
use PDO;
// *连接
$db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
// *sql语句:CURD(增删改查):insert
$sql="INSERT INTO staff(`name`,`sex`,`eamil`)VALUES(:name,:sex,:email)";
//$sql = 'INSERT `staff` SET `name`= :name,`sex`= :sex,`email`= :email;';
// *对sql语句进行预处理
$stmt=$db->prepare($sql);
// *放入实参
$data=['name'=>'关羽','sex'=>0,'email'=>'guanyu@qq.com'];
//* 执行sql
$stmt->execute($data);
//* 验证: 打印sql预处理命令(正式运行时注释掉)
$stmt->debugDumpParams();
echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
2.浏览器效果图:
题目3:预处理第3种方案:参数绑定:值绑定 bindValue()
1.demo3.php文件:
<?php
// *预处理第3种方案:参数绑定:值绑定 bindValue()
namespace _221124c;
use PDO;
// *连接
$db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
// *sql语句:CURD(增删改查):insert
// $sql="INSERT INTO staff(`name`,`sex`,`eamil`)VALUES(?,?,?)";
// *运用heredoc多行语句
$sql=<<< SQL
INSERT INTO staff (`name`,`sex`,`eamil`)
VALUES (?,?,?);
SQL;
// *对sql语句进行预处理
$stmt=$db->prepare($sql);
// *bindValue(key,value,type): 匿名占位符,key:索引是从1开始
$stmt->bindValue(1, '曹操', PDO::PARAM_STR);
$stmt->bindValue(2, 0, PDO::PARAM_INT);
$stmt->bindValue(3, 'caocao@qq.com', PDO::PARAM_STR);
// 执行sql
$stmt->execute();
echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
2.浏览器效果图:
题目4:预处理第4种方案:动态绑定bindParam()
1.demo4.php文件:
<?php
// *预处理第4种方案:动态绑定bindParam()
namespace _221124d;
use PDO;
// *连接
$db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
// *sql语句:CURD(增删改查):insert
$sql="INSERT INTO staff(`name`,`sex`,`eamil`)VALUES(?,?,?)";
// *对sql语句进行预处理
$stmt=$db->prepare($sql);
//* 引用绑定: 动态绑定,绑定的不是数据本身,而它的地址/引用/别名
$stmt->bindParam(1, $name, PDO::PARAM_STR);
$stmt->bindParam(2, $sex, PDO::PARAM_INT);
$stmt->bindParam(3, $email, PDO::PARAM_STR);
// *列表参数输入实参
// list($name, $sex, $email)=['孔明', 0, 'kongmin@qq.com'];
// *执行sql
// $stmt->execute();
// echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
// *再新增一条
// *列表参数输入实参
list($name, $sex, $email)=['赵云', 0, 'zaoyun@qq.com'];
//*再执行sql
$stmt->execute();
echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
2.浏览器效果图:
题目5:动态绑定中使用foreach()代替list()一次性插入多条语句
1.demo5.php文件:
<?php
// *动态绑定中使用foreach()代替list()一次性插入多条语句
namespace _221124e;
use PDO;
// *连接
$db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
// *sql语句:CURD(增删改查):insert
$sql="INSERT INTO staff(`name`,`sex`,`eamil`)VALUES(?,?,?)";
// *对sql语句进行预处理
$stmt=$db->prepare($sql);
//* 引用绑定: 动态绑定,绑定的不是数据本身,而它的地址/引用/别名
$stmt->bindParam(1, $name, PDO::PARAM_STR);
$stmt->bindParam(2, $sex, PDO::PARAM_INT);
$stmt->bindParam(3, $email, PDO::PARAM_STR);
// *利用二维数组来输入多条实参
$data=[
['宋江',0,'songjian@qq.com'],
['林冲',0,'lincong@qq.com'],
['孙二娘',1,'sunerliang@qq.com'],
];
// *相当于多次遍历list(x1,x2,x3)=[y1,y2,y3]
foreach ($data as list($name, $sex, $email)) {
// *执行sql
$stmt->execute();
echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
}
2.浏览器效果图:
题目6:sql语句执行时,判断执行成功或者失败,并加入不同的代码
1.demo6.php文件:
<?php
// *sql语句执行时,判断执行成功或者失败,并加入不同的代码
namespace _221124f;
use PDO;
// *连接
$db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
// *sql语句:CURD(增删改查):insert
$sql="INSERT INTO staff(`name`,`sax`,`eamil`)VALUES(?,?,?)";
// $sql = 'INSERT `staff` SET `name`= ?,`sex`= ?,`email`= ?;';
// *对sql语句进行预处理
$stmt=$db->prepare($sql);
// *放入实参
$data=['孙权',0,'sunquan@qq.com'];
// *执行时,判断是否成功或失败:$stmt->execute($data) : true / false
if ($stmt->execute($data)) {
echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
} else {
// *false
echo 'sql执行失败';
print_r($stmt->errorInfo());
}
2.浏览器效果图:
题目7:利用rowCount()方法看写操作中的增删改是否成功与否
1.demo7.php文件:
<?php
// *利用rowCount()方法看写操作中的增删改是否成功与否
namespace _221124g;
use PDO;
// *连接
$db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
// *sql语句:CURD(增删改查):insert
$sql="INSERT INTO staff(`name`,`sex`,`eamil`)VALUES(?,?,?)";
// $sql = 'INSERT `staff` SET `name`= ?,`sex`= ?,`email`= ?;';
// *对sql语句进行预处理
$stmt=$db->prepare($sql);
// *放入实参
$data=['周瑜',0,'zouyu@qq.com'];
// *执行时,判断是否成功或失败:$stmt->execute($data) : true / false
if ($stmt->execute($data)) {
if ($stmt->rowCount() > 0) {
// *success
echo '新增成功, id = ' . $db->lastInsertId() . '<br>';
} else {
// *fail
echo '新增失败';
print_r($stmt->errorInfo());
}
} else {
// *false
echo 'sql执行失败';
print_r($stmt->errorInfo());
}
2.浏览器效果图:
题目8:利用第1种方案对数据进行更新
1.demo8.php文件:
<?php
// *利用第1种方案对数据进行更新
namespace _221124h;
use PDO;
// *连接
$db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
// *sql语句:CURD(增删改查):update
$sql="UPDATE `staff` SET `name`= ?,`sex`= ?,`eamil`= ? WHERE `id` = ?" ;
// *特别提示:绝对禁止"无条件更新"
// *检测一下sql语句中, 是否存在 where 子句
// *strpos, stripos:忽略大小写
if (false === stripos($sql, 'where')) {
exit('禁止无条件更新');
}
// *对sql语句进行预处理
$stmt = $db->prepare($sql);
// *放入修改的实参
$data = ['张艳丽', 1, 'zyl@qq.com', 5];
// *执行sql
if ($stmt->execute($data)) {
if ($stmt->rowCount() > 0) {
echo '成功的更新了 '.$stmt->rowCount() . '条记录~~';
} else {
// *主要用于检测是否重复执行
echo '没有记录被更新';
print_r($stmt->errorInfo());
}
} else {
echo 'sql执行失败';
print_r($stmt->errorInfo());
}
2.浏览器效果图:
题目9:利用第1种方案对数据进行删除
1.demo9.php文件:
<?php
// *利用第1种方案对数据进行删除
namespace _221124i;
use PDO;
// *连接
$db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
// *sql语句:CURD(增删改查):delete
$sql = "DELETE FROM `staff` WHERE `id` = ?";
//* 特别提示:绝对禁止"无条件删除"
if (false === stripos($sql, 'where')) {
exit('禁止无条件删除');
}
// *对sql语句进行预处理
$stmt = $db->prepare($sql);
// *执行sql
if ($stmt->execute([2])) {
if ($stmt->rowCount() > 0) {
echo '成功的删除了 '.$stmt->rowCount() . ' 条记录~~';
} else {
// 主要用于检测是否重复执行
echo '没有记录被删除';
print_r($stmt->errorInfo());
}
} else {
echo 'sql执行失败';
print_r($stmt->errorInfo());
// $stmt->debugDumpParams();
}
2.浏览器效果图:
题目10:预处理第5种方案:逐条获取fetch()
1.demo10.php文件:
<?php
// *预处理第5种方案:逐条获取fetch()
namespace _221124j;
use PDO;
// *连接
$db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
// *sql语句:CURD(增删改查):select
$sql = "SELECT `id`,`name`,`eamil` FROM `staff`LIMIT ?";
// *对sql语句进行预处理
$stmt = $db->prepare($sql);
// *数据指针位置从1开始:
$index=1;
// *数据指针下移的条数:
$num=3;
// *sql语句预处理绑定的参数
$stmt->bindParam($index,$num,PDO::PARAM_INT);
// *执行sql
if ($stmt->execute()) {
// *fetch(): 逐条获取,指针自动后移指向下一条, false / 记录
//* PDO::FETCH_ASSOC: 只返回关联数组
// *while循环
while ($staff = $stmt->fetch(PDO::FETCH_ASSOC)) {
printf('<pre>%s</pre>', print_r($staff, true));
}
} else {
echo 'sql执行失败';
print_r($stmt->errorInfo());
}
2.浏览器效果图:
题目11:预处理第6种方案:全部获取fetchAll()
1.demo11.php文件:
<?php
// *预处理第6种方案:全部获取fetchAll()
namespace _221124k;
use PDO;
// *连接
$db = new PDO('mysql:dbname=phpedu1', 'root', 'root');
// *sql语句:CURD(增删改查):select
$sql = "SELECT `id`,`name`,`eamil` FROM `staff`LIMIT ?";
// *对sql语句进行预处理
$stmt = $db->prepare($sql);
// *数据指针位置从1开始:
$index=1;
// *数据指针下移的条数:
$num=4;
// *sql语句预处理绑定的参数
$stmt->bindParam($index,$num,PDO::PARAM_INT);
// *执行sql
if ($stmt->execute()) {
// *fetchAll(): 获取全部满足条件的记录
$staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
// *foreach()(把二维数组作为一维数组逐个进行遍历,然后逐个进行打印)
foreach ($staffs as $staff) {
printf('<pre>%s</pre>', print_r($staff, true));
}
} else {
echo 'sql执行失败';
print_r($stmt->errorInfo());
}
2.浏览器效果图: