PDO将数据插入表中
时间:2018-11-15 15:22:39 来源:igfitidea点击:
在本教程中,我们将学习如何使用PDO API将数据插入到数据库表中。
以下是如何使用PDO将数据插入表的步骤:
- 通过创建一个新的PDO对象来创建到数据库的连接。
- 使用SQL INSERT语句将数据插入到表中。
- 调用PDO对象的exec()方法来执行INSERT语句。exec()方法返回成功时受影响的行数,失败时返回false。
PDO将数据插入到表中 - 示例
我们将在示例数据库empdb中的departments表中插入一个新部门。
- 首先,我们创建一个用于创建新部门的表单。
表单由一个接受部门名称的文本字段和一个提交按钮组成。
- 然后,当我们输入部门名称并点击
创建部门
按钮时,我们需要:
- 使用filter_var()函数校验用户的输入
- 通过查询部门表的数据,检查输入部门名称是否已经存在。如果部门已经存在,则显示一条错误消息。否则,我们将插入新部门并显示一条成功消息。
- 要将一个新部门插入到departments表中,我们需要构造一个insert语句并调用PDO对象的exec()方法。
将数据插入表脚本
我们将把以下代码放在脚本文件的开头:
<?php $msg = ''; $result = false; if (isset($_POST['submit'])) { require_once 'dbconfig.php'; $dsn = "mysql:host=$host;dbname=$db"; try { // 建立数据库连接 $dbh = new PDO($dsn, $username, $password); // 创建新的部门 $result = create_dept(); // 再次显示插入表单 display_form(); } catch (PDOException $e) { echo $e->getMessage(); } } else { // display insert form display_form(); }
如果表单没有提交,我们将显示它。如果它被提交,我们执行上面描述的逻辑。
以下是每一步的函数:
函数-验证部门:
/** * 验证部门 * @return boolean 成功时返回部门名称,失败时返回false */ function validate_dept() { global $msg; $dept_name = $_POST['department']; if ($dept_name != '') { $dept_name = filter_var($dept_name, FILTER_SANITIZE_STRING); return $dept_name; } else { $msg = '请输入部门名称'; return false; } }
函数-检查部门是否存在
/** * 检查部门是否存在 * @param string $dept_name 部门名称 * @return NULL|boolean 如果部门存在,返回true;如果不存在,返回false;如果失败,返回NULL */ function dept_exist($dept_name) { global $msg, $dbh; $sql_select = "SELECT department_no FROM departments WHERE name = " . $dbh->quote($dept_name) . " LIMIT 1"; $stmt = $dbh->query($sql_select); if ($stmt === false) { $msg = '查询部门表departments出错'; return NULL; } $r = $stmt->fetch(PDO::FETCH_ASSOC); if ($r !== false) { $msg = "名称叫 $dept_name 的部门已存在."; return true; } else return false; }
函数 - 表中添加一个新部门
/** * 表中添加一个新的部门 * @param string $dept_name 部门名称 * @return boolean 成功时返回true,失败时返回false */ function insert_dept($dept_name) { global $dbh, $msg; // 构造SQL insert语句 $sql_insert = "INSERT INTO departments(name) VALUES(" . $dbh->quote($dept_name) . ")"; if ($dbh->exec($sql_insert) === false) { $msg = '添加新部门错误。'; return false; } else { $msg = "新部门 $dept_name 已添加"; return true; } }
函数 - 创建新部门,包括验证逻辑,检查是否已存在和创建
/** * 添加新部门 * @return boolean 成功时返回true,失败时返回false */ function create_dept() { // 验证部门值 $dept_name = validate_dept(); if ($dept_name) { // 检查部门是否已存在 if (!dept_exist($dept_name)) { // 数据表中添加部门 return insert_dept($dept_name); } } return false; }
函数 - 显示错误或成功消息
/** * 根据消息类型显示消息 * @param string $msg 要显示的消息 * @param boolean $type true: 成功的消息, * false: 失败的消息 */ function display_msg($msg, $type) { $type === true ? $cssClass = "alert-success" : $cssClass = "alert-error"; if ($msg != '') { ?> <div class="alert <?php echo $cssClass; ?>"> <?php echo $msg; ?> </div> <?php } }
函数 - 显示表单
<?php /** * 显示创建新部门的表单 */ function display_form() { global $msg, $result; ?> <!DOCTYPE html> <html> <head> <title>创建部门</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap.min.css"> </head> <body> <div class="container" style="margin-top:20px;"> <form action = "<?php $_SERVER['PHP_SELF'] ?>" method = "POST" class = "form-horizontal"> <?php display_msg($msg, $result); ?> <div class="control-group"> <label for="department" class="control-label">部门:</label> <div class="controls"> <input type="text" name="department" id="department" class="input-xlarge" placeholder="输入部门名称" /> </div> </div> <div class="control-group"> <div class="controls"> <input name="submit" type="submit" value="创建部门" class="btn btn-primary" /> </div> </div> </form> </div> </body> </html> <?php }
下载代码