博客列表 >PDO写操作与用户管理一2019年2月25日22点20分

PDO写操作与用户管理一2019年2月25日22点20分

澜海的博客
澜海的博客原创
2019年11月08日 16:28:41868浏览

2019-02-25

PDO写操作与用户管理一2019年2月25日22点20分

作业要求

  • 使用PDO进行数据表的新增,更新与删除操作练习
  • 独立完成员工管理系统中的用户更新操作, 体会Ajax在前后端交互的作用
  • 查询js手册, 对json数据格式做一个了解
  • 对今晚提到的php函数, 查询手册, 了解它的参数,用途

逐一作答

  • 1、使用PDO进行数据表的新增,更新与删除操作练习
  • 无论新增、更新或者删除,操作数据库的开始步骤都是一样的,即:
    1.连接数据库,创建PDO对象
    2.准备SQL语句
    3.执行SQL
    4.处理执行结果
    5.关闭数据库连接

新增操作

附一个简化的操作版本

代码
```$xslt
<?php
// 1.连接数据库,创建PDO对象
$pdo = new PDO(‘mysql:host=localhost;dbname=php’,’root’,’root’);

//2.准备SQL语句,创建预处理对象
$sql = ‘INSERT INTO staff (name,age, sex, position, mobile, hiredate) ‘;
//sql较长的情况下,可以拼接,如下
$sql .= ‘ VALUES (:name, :age, :sex, :position, :mobile, :hiredate)’;

$stmt = $pdo->prepare($sql);

//3. 参数绑定,执行SQL语句

$name = ‘春丽’;
$age = 18;
$sex = 1;
$position = ‘游戏角色’;
$mobile = ‘18987654321’;
$hiredate = time();
//绑定到SQL语句占位符上
$stmt->bindParam(‘name’,$name,PDO::PARAM_STR, 20);
$stmt->bindParam(‘age’, $age, PDO::PARAM_INT);
$stmt->bindParam(‘sex’, $sex, PDO::PARAM_INT);
$stmt->bindParam(‘position’, $position, PDO::PARAM_STR, 20);
$stmt->bindParam(‘mobile’, $mobile, PDO::PARAM_STR, 11);
$stmt->bindParam(‘hiredate’, $hiredate, PDO::PARAM_INT);

//执行sql语句
$stmt->execute();

//简化方法:因为有6个参数,逐一绑定太麻烦,我们通过数组来简单这一操作
// 创建二个数组分别保存参数的键和值
$key = [‘name’, ‘age’, ‘sex’, ‘position’, ‘mobile’, ‘hiredate’];
$value = [‘蓝玉’,45,1,’明朝名将’,’18929999992’,time()];
//// array_combine()将键数组与值数组合并成新数组
$data = array_combine($key,$value);

//执行execute(),参数为数组,默认全部字符类型
$stmt->execute($data);

//4. 对执行结果进行处理,对返回受影响的记录数量进行判定
if($stmt->rowCount()>0){
echo ‘添加了’. $stmt->rowCount() . ‘条记录’;
}

//5. 断开连接
$pdo = null;

  1. ### 更新操作
  2. * 无论新增、更新或者删除,操作数据库的开始步骤都是一样的,更新操作无非就是重新编辑了SQL为更新操作
  3. * 附更新操作的简便方法
  4. > 代码
  5. ```$xslt
  6. <?php
  7. // 1.连接数据库,创建PDO对象
  8. $pdo = new PDO('mysql:host=localhost;dbname=php','root','root');
  9. //2.准备SQL语句,创建预处理对象
  10. $sql = 'UPDATE `staff` SET `position` = :position WHERE `id` = :id ';
  11. $stmt = $pdo->prepare($sql);
  12. //3. 参数绑定,绑定到SQL语句占位符上,执行SQL语句
  13. $stmt->bindValue('position','天文台', PDO::PARAM_STR);
  14. $stmt->bindValue('id', 7, PDO::PARAM_INT);
  15. //执行sql语句
  16. $stmt->execute();
  17. //简化的操作
  18. $stmt->execute(['position'=>'科学馆', 'id'=>6]);
  19. //4. 对执行结果进行处理,对返回受影响的记录数量进行判定
  20. if($stmt->rowCount()>0){
  21. echo '更新了'. $stmt->rowCount() . '条记录';
  22. }else {
  23. echo '没有更新记录';
  24. }
  25. //5. 断开连接
  26. $pdo = null;

删除操作

  • 无论新增、更新或者删除,操作数据库的开始步骤都是一样的,删除操作无非就是重新编辑了SQL为更新操作

代码
```$xslt
<?php
// 1.连接数据库,创建PDO对象
$pdo = new PDO(‘mysql:host=localhost;dbname=php’,’root’,’root’);

//2.准备SQL语句,创建预处理对象
$sql = ‘DELETE FROM staff WHERE id = :id ‘;
$stmt = $pdo->prepare($sql);

//3.执行sql语句
// 添加检测机制,让代码更加的健壮
if ($stmt->execute([‘id’=>10])) {
// 4. 处理执行结果
if ($stmt->rowCount() > 0) {
echo ‘成功删除了’ . $stmt->rowCount() . ‘条记录’;
} else {
echo ‘没有记录被删除’;

  1. }

} else {
echo print_r($stmt->errorInfo(),true);
}

// 4. 断开连接
$pdo = null;

  1. * 2、独立完成员工管理系统中的用户更新操作, 体会Ajax在前后端交互的作用
  2. * Ajax 使用异步的方式调用,更加友好的给用户体验
  3. + Ajax 练习,使用Ajax 完成GET请求、POST请求
  4. + 1.创建Ajax对象
  5. + 2.创建请求事件的回调,获取响应数据,执行DOM操作
  6. + 3.创建URL请求
  7. + 4.发送URL请求
  8. +get请求的url地址,可以带参数,用&分割,也可以不带参数
  9. > 代码

//user_edit.php代码

<?php
//echo $_GET[‘id’];
$id = intval(trim($_GET[‘id’]));
$pdo = new PDO(‘mysql:dbname=php’, ‘root’, ‘root’);
$stmt = $pdo->prepare(“SELECT * FROM user WHERE id={$id}”);
$stmt->execute();

$user = $stmt->fetch(PDO::FETCH_ASSOC);
//print_r($user);
?>
<!DOCTYPE html>

<html lang="en">

<head>
<meta charset="UTF-8">
<title>用户编辑</title>
<style>
h3 {
text-align: center;
}

  1. div {
  2. width: 300px;
  3. height: 180px;
  4. /*background-color: lightblue;*/
  5. margin: 0 auto;
  6. text-align: center;
  7. padding: 20px;
  8. border: 1px dashed #888;
  9. border-radius: 5%;
  10. }
  11. div input {
  12. border: none;
  13. border-bottom: 1px solid #333;
  14. }
  15. button:hover {
  16. cursor: pointer;
  17. background-color: lightblue;
  18. }
  19. .success {
  20. color: green;
  21. }
  22. .error {
  23. color: red;
  24. }
  25. </style>

</head>

<body>

<h3>用户编辑</h3>

<div>
<form name="user">
<p>
<label>用户名:
<input type="text" name="name" value="<?=$user['name']?>" disabled>
</label>
</p>

<p>
<label>邮   箱:
<input type="email" id="email" name="email" value="<?=$user['email']?>" autofocus>
</label>
</p>

<p>
<label>密   码:
<input type="password" id="password" name="password" value="<?=$user['password']?>">
</label>
</p>
<!-- 将当前用户的id,做为更新条件,以隐藏域的方式发送到服务器端-->
<input type="hidden" id="id" value="<?=$user['id']?>">

<p>
<button type="button" onclick="save(this.form)">保存</button>
<button type="button" onclick="history.back()">取消</button>
</p>

<!-- 提示信息占位符-->
<p></p>
</form>
</div>

<script>
function save(form) {
// var user = document.getElementsByTagName(‘form’).namedItem(‘user’);

  1. //ajax提交
  2. //console.log(form);
  3. var request = new XMLHttpRequest();
  4. request.onreadystatechange = function () {
  5. console.log(request.responseText);
  6. if (request.readyState === 4 && request.status === 200) {
  7. var data = JSON.parse(request.responseText);
  8. //console.log(data);
  9. // 获取提示信息占位元素
  10. var tips = form.lastElementChild;
  11. //console.log(tips);
  12. tips.innerText = data.message;
  13. // 根据返回的状态,添加适当的class样式
  14. if (data.status === 1) {
  15. tips.classList.add('success');
  16. }
  17. // 没有更新或更新错误采用同一个样式
  18. else {
  19. tips.classList.add('error');
  20. }
  21. // 2秒后跳转到上一个页面,即用户列表页
  22. setTimeout(function (){
  23. history.back();
  24. },2000);
  25. }
  26. };
  27. request.open('POST','user_manage.php?action=save');
  28. request.setRequestHeader('content-type','application/x-www-form-urlencoded');
  29. request.send('email='+form.email.value+'&password='+form.password.value+'&id='+form.id.value);
  30. }

</script>
</body>
</html>

  1. //user_manage.php 代码

<?php
error_reporting(E_ALL ^ E_WARNING);

$pdo = new PDO(‘mysql:dbname=php’, ‘root’, ‘root’);

//print_r($_POST);

$action = $_GET[‘action’];
$action = strtolower(trim($action));

switch ($action) {
case ‘save’ :
$sql = ‘UPDATE user SET email=:email, password=:password WHERE id=:id’;
$stmt = $pdo->prepare($sql);

  1. $email = strtolower(trim($_POST['email']));
  2. $password = sha1(strtolower(trim($_POST['password'])));
  3. $id = strtolower(trim($_POST['id']));
  4. $stmt->bindParam('email',$email, PDO::PARAM_STR,60);
  5. $stmt->bindParam('password',$password, PDO::PARAM_STR,20);
  6. $stmt->bindParam('id',$id, PDO::PARAM_INT);
  7. if($stmt->execute()) {
  8. if($stmt->rowCount() == 1){
  9. $status = 1;
  10. $message = '更新成功';
  11. } else if ($stmt->rowCount() == 0) {
  12. $status = 0;
  13. $message = '信息没有更新';
  14. }
  15. }else {
  16. $status = -1;
  17. $message = '保存失败,请检查';
  18. }
  19. echo json_encode(['status'=>$status, 'message'=>$message]);
  20. break;

}

  1. * 3、查询js手册, json数据格式做一个了解
  2. * JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
  3. + JSON 函数 函数描述 json_encode 对变量进行 JSON 编码 json_decode JSON 格式的字符串进行解码,转换为 PHP 变量 json_last_error 返回最后发生的错误 json_encode PHP json_encod
  4. * 4、对今晚提到的php函数, 查询手册, 了解它的参数,用途
  5. * 本节课程涉及到的主要是数据库操作函数,下面分别对这些函数进行了解
  6. * PDO 函数
  7. * 如果你的项目需要在多种数据库中切换,建议使用 PDO ,这样你只需要修改连接字符串和部门查询语句即可。 使用 MySQLi, 如果不同数据库,你需要重新编写所有代码,包括查询。两者都是面向对象, MySQLi 还提供了 API 接口。
  8. * PHP PDO PHP 数据对象 PDO 扩展为PHP访问数据库定义了一个轻量级的一致接口。 PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。 PDOPHP5.1发行,在PHP5.0PECL扩展中也可以使用,无法运行于之前的PHP版本。 PDO 安装 你可以通过 PHP phpinfo() 函数来查看是否安装了PDO扩展。
  9. ```angular2
  10. <?php
  11. $dbms='mysql'; //数据库类型
  12. $host='localhost'; //数据库主机名
  13. $dbName='test'; //使用的数据库
  14. $user='root'; //数据库连接用户名
  15. $pass=''; //对应的密码
  16. $dsn="$dbms:host=$host;dbname=$dbName";
  17. try {
  18. $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象
  19. echo "连接成功<br/>";
  20. /*你还可以进行一次搜索操作
  21. foreach ($dbh->query('SELECT * from FOO') as $row) {
  22. print_r($row); //你可以用 echo($GLOBAL); 来看到这些值
  23. }
  24. */
  25. $dbh = null;
  26. } catch (PDOException $e) {
  27. die ("Error!: " . $e->getMessage() . "<br/>");
  28. }
  29. //默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true) 变成这样:
  30. $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
  31. ?>
  • PDO::prepare — 备要执行的SQL语句并返回一个 PDOStatement 对象
  • PDOStatement 类:
  • PDOStatement::bindColumn — 绑定一列到一个 PHP 变量
  • PDOStatement::bindParam — 绑定一个参数到指定的变量名
  • PDOStatement::bindValue — 把一个值绑定到一个参数
  • PDOStatement::fetch — 从结果集中获取下一行
  • PDOStatement::execute — 执行一条预处理语句
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议