今天,学习了用PDO预处理技术对数据新增 更新 删除,学习了可靠的得到查询数据数量的方法,还有学习了员工管理系统中的用户的查询 更新 保存的功能。
一、PDO预处理数据的新增更新删除
这部分同昨天的查询大同小异,也是通过数据绑定来实现。
二、可靠的查询数据数量的方法
通过count函数得到符合条件的数据的数量,形成一个列,然后通过判断列是否有值,然后再进行查询。例如:
实例
<?php //正确获取影响数 //连接数据库 $pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root'); //用count函数获取影响行数的列 $sql = 'SELECT count(*) FROM `admin` WHERE `age`>:age'; $stmt = $pdo->prepare($sql); $stmt->execute(['age'=>40]); if ($stmt->fetchColumn(0)) { $sql = 'SELECT * FROM `admin` WHERE `age`>:age'; $stmt = $pdo->prepare($sql); $stmt->execute(['age'=>40]); foreach ($stmt->fetchAll() as $item) { echo '<pre>', print_r($item, true); } }
运行实例 »
点击 "运行实例" 按钮查看在线实例
三、案例:员工管理系统中的用户查询,更新,保存。
功能实现的流程为:user_list(查询所有用户)-》user_edit(更新用户的用户名与密码,ajax与user_manage交互)->user_manage(对提交过来的数据进行判定,然后对数据进行更新,然后再把处理后的结果数据返回给user_edit)
实例
<?php //连接数据库 $pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root'); //sql语句 $sql = 'SELECT * FROM `user` LIMIT 1'; //准备对象 $stmt = $pdo->prepare($sql); //执行 $stmt->execute(); // 员工信息 $user = $stmt->fetch(PDO::FETCH_ASSOC); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用户设置</title> <style> table,th,td { border: 1px solid #666; padding: 8px; } table { border-collapse: collapse; width: 80%; text-align: center; margin: 30px auto; } thead tr:first-of-type { background-color: lightblue; } table > caption { font-size: 1.2rem; margin-bottom: 15px; } button:hover { cursor: pointer; background-color: lightblue; } </style> </head> <body> <table> <caption>用户设置</caption> <thead> <tr> <th>id</th> <th>用户名</th> <th>邮箱</th> <th>操作</th> </tr> <tr> <td><?= $user['id']?></td> <td><?= $user['name']?></td> <td><?= $user['email']?></td> <td> <button onclick="location.href='user_edit.php?id=<?= $user['id']?>'">编辑</button> </td> </tr> </thead> </table> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
<?php //echo $_GET['id']; //连接数据库 $pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root'); //sql语句 $id = intval(trim($_GET['id'])); $sql = "SELECT * FROM `user` WHERE `id`={$id} "; //准备对象 $stmt = $pdo->prepare($sql); //执行查询 $stmt->execute(); //获取查询结果数组 $user = $stmt->fetch(PDO::FETCH_ASSOC); ?> <!doctype html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>用户编辑</title> <style> h3 { text-align: center; } div { width: 300px; height: 180px; /*background-color: lightblue;*/ margin: 0 auto; text-align: center; padding: 20px; border: 1px dashed #888; border-radius: 5%; } div input { border: none; border-bottom: 1px solid #333; } button:hover { cursor: pointer; background-color: lightblue; } .success { color: green; } .error { color: red; } </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> <!-- ajax提交修改数据--> <script> function save(form) { // ajax提交 var request = new XMLHttpRequest(); // 请求成功的回调处理 request.onreadystatechange = function () { if (request.readyState === 4 && request.status === 200) { var data = JSON.parse(request.responseText); // 获取信息提示占位元素 var tips = form.lastElementChild; tips.innerHTML = data.message; if (data.status === 1) { tips.classList.add('success'); } else { tips.classList.add('error'); } // 2秒钟跳转到上个页面 setTimeout(function () { history.back(); }, 2000); } }; // 设置请求参数 request.open('POST', 'user_manage.php?action=save'); // 设置请求头信息 request.setRequestHeader('content-type', 'application/x-www-form-urlencoded'); // 发送请求 request.send('email='+form.email.value+'&password='+form.password.value+'&id='+form.id.value); } </script> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
<?php //连接数据库 $pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root'); //获取action方法 $action = strtolower(trim($_GET['action'])); //对action方法分别进行操作 switch ($action) { case 'save': $sql = "UPDATE `user` SET `email`=:email, `password`=:password WHERE `id`=:id"; $stmt = $pdo->prepare($sql); $email = strtolower(trim($_POST['email'])); $password = strtolower(trim($_POST['password'])); $id = strtolower(trim($_POST['id'])); $stmt->bindParam('email', $email, PDO::PARAM_STR, 60); $stmt->bindParam('password', $password, PDO::PARAM_STR, 20); $stmt->bindParam('id', $id, PDO::PARAM_INT); if ($stmt->execute()) { if ($stmt->rowCount() === 1) { $status = 1; $message = '保存成功'; } elseif ($stmt->rowCount() === 0) { $status = 0; $message = '信息没有更新'; } } else { $status = -1; $message = '保存失败'; } echo json_encode(['status'=>$status, 'message'=>$message]); }
运行实例 »
点击 "运行实例" 按钮查看在线实例
四、总结
今天重点再案例上,难度不大但是涉及到3个页面,以及ajax的交互。这三个页面中数据的交互为:user_list是将用户中的所有数据查询然后显示,通过点击编辑按钮将id值通过get方式传递到user_edit,user_edit通过传过来的id值就可以将相应的id email password进行展示,然后通过点击保存按钮触发其绑定的save方法,save方法主要是通过ajax将数据异步到user_manage,传输的数据有post方式的表单中的email password 和隐藏的id 还有get方式的action值为save,数据到了user_manage后开始处理,如果action的值为save 那么就进行更新操作,更加rowcount的值来判断他是否进行修改 ,再按照实际情况将分别赋值status message,通过json格式返回给user_edit,user_edit根据相应的值进行相应的显示。
还学习了json格式,他是html认识的数据格式,php中通过json_encode返回一个json格式 js中通过json.parse()来解析成为对象或者数组;
php中trim函数用来去掉空格 strtolower用来转换为小写 intval转换成整数