php操作mysql数据库进行增删改查(crud)的核心在于构建sql语句并执行。1. 建立数据库连接:使用mysqli或pdo扩展创建连接对象,并验证连接是否成功;2. 创建数据表:通过create table语句定义字段和属性,如主键、自动递增等;3. 插入数据:使用insert into语句插入记录,并可通过insert_id获取最后插入的id;4. 查询数据:通过select语句结合fetch_assoc()逐行获取结果集;5. 更新数据:使用update语句指定更新条件和字段值;6. 删除数据:使用delete语句根据条件删除记录;7. 关闭连接:每次操作后调用close()方法释放资源;8. 防止sql注入:使用预处理语句和参数绑定,确保输入安全;9. 处理连接错误:通过try...catch捕获异常并记录日志,保证程序健壮性;10. 优化性能:包括添加索引、避免select *、使用limit、缓存查询结果、分析sql执行计划、使用持久连接及批量操作;11. 使用pdo进行数据库操作:通过pdo接口实现统一数据库访问,支持多种数据库系统,提升代码可移植性和错误处理能力。
PHP操作MySQL数据库进行增删改查(CRUD)的核心在于构建SQL语句并执行。理解基本的SQL语法和PHP的数据库连接函数是关键。
首先,你需要建立与MySQL数据库的连接,然后才能执行任何CRUD操作。
以下是一个简单的PHP MySQL CRUD教程,包含源码示例:
立即学习“PHP免费学习笔记(深入)”;
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检测连接 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } echo "连接成功"; ?>
<?php $sql = "CREATE TABLE MyGuests ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstname VARCHAR(30) NOT NULL, lastname VARCHAR(30) NOT NULL, email VARCHAR(50), reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP )"; if ($conn->query($sql) === TRUE) { echo "Table MyGuests created successfully"; } else { echo "创建数据表错误: " . $conn->error; } ?>
<?php $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com')"; if ($conn->query($sql) === TRUE) { $last_id = $conn->insert_id; echo "新记录插入成功。 最后插入的 ID 是: " . $last_id; } else { echo "Error: " . $sql . "<br>" . $conn->error; } ?>
<?php $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = $conn->query($sql); if ($result->num_rows > 0) { // 输出每行数据 while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 结果"; } ?>
<?php $sql = "UPDATE MyGuests SET lastname='Smith' WHERE id=2"; if ($conn->query($sql) === TRUE) { echo "记录更新成功"; } else { echo "更新记录出错: " . $conn->error; } ?>
<?php $sql = "DELETE FROM MyGuests WHERE id=3"; if ($conn->query($sql) === TRUE) { echo "记录删除成功"; } else { echo "删除记录出错: " . $conn->error; } ?>
<?php $conn->close(); ?>
使用预处理语句和参数绑定是防止SQL注入攻击的最佳方法。 MySQLi和PDO都支持预处理语句。
<?php // 预处理语句示例 (MySQLi) $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"); $stmt->bind_param("sss", $firstname, $lastname, $email); // 设置参数并执行 $firstname = "John"; $lastname = "Doe"; $email = "john@example.com"; $stmt->execute(); $firstname = "Jane"; $lastname = "Doe"; $email = "jane@example.com"; $stmt->execute(); echo "新记录插入成功"; $stmt->close(); ?>
完善的错误处理是健壮应用程序的关键。
<?php try { $conn = new mysqli($servername, $username, $password, $dbname); $conn->set_charset("utf8"); // 设置字符集,避免中文乱码 if ($conn->connect_error) { throw new Exception("数据库连接失败: " . $conn->connect_error); } // 执行数据库操作... } catch (Exception $e) { error_log($e->getMessage()); // 记录错误日志 echo "发生错误,请稍后重试。"; // 显示友好的错误信息 } finally { if ($conn) { $conn->close(); // 始终关闭连接 } } ?>
性能优化对于高流量网站至关重要。
PDO (PHP Data Objects) 是一个为PHP访问数据库定义了一个轻量级的、一致性的接口。
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // 设置 PDO 错误模式为异常 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com')"; // 使用 exec() ,因为没有结果返回 $conn->exec($sql); echo "新记录插入成功"; } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?>
使用PDO的预处理语句进行查询:
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests WHERE lastname=:lastname"); $stmt->bindParam(':lastname', $lastname); $lastname = "Doe"; $stmt->execute(); // 设置结果为关联数组 $stmt->setFetchMode(PDO::FETCH_ASSOC); foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { echo $v; } } catch(PDOException $e) { echo "Error: " . $e->getMessage(); } $conn = null; echo "</table>"; ?>
PDO提供了更灵活和强大的数据库操作方式,并且可以更容易地切换不同的数据库系统。
以上就是PHP数据库增删改查 PHP源码操作MySQL CRUD教程的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号