ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# mysql数据库操作 >[success]PHP与Mysql可谓是黄金搭档!所以必要熟练掌握相关的知识。虽然说现在PHP的开发大部分都在使用比较成熟的框架,但是掌握原生PHP操作Mysql是十分必要的。 > ## 常见PHP操作Mysql的方式 >[info] PHP连接Mysql的方式,有:mysql、msyqli、pdo > >[danger]`mysql`这种方式,目前基本上不使用了。 > PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP Data Objects) ## `mysqli`操作`Mysql` >[success]`Mysqli`和`Mysql`在命令格式上基本上和操作上基本一致。 > >[danger]mysqli的操作上有`面向对象`和`面向过程`两种,不过在使用上都差不多。 ### 连接`mysql`数据库 1. 面向对象 ~~~ <?php $servername="127.0.0.1"; $username="root"; $password="HbhRrH666CJH2ciY"; $mydbname="databasename"; // 创建连接 $link=new mysqli($servername,$username,$password,$mydbname); // 检测连接 if($link->connect_error){ die("连接失败".$link->connect_error); } echo "连接成功"; //关闭连接 $conn->close(); ?> ~~~ 2. 面向过程 ~~~ <?php $servername="127.0.0.1"; $username="root"; $password="HbhRrH666CJH2ciY"; $mydbname="databasename"; // 创建连接 $link=mysqli_connect($servername,$username,$password,$mydbname); // 检测连接 if(!$link){ die("连接失败".mysqli_connect_error()); } echo "连接成功"; //关闭连接 mysqli_close($conn); ?> ~~~ >[danger]判断数据库连接成功的方法,除了上述方式外,还可以使用`mysqli_connect_errno() `函数来判断 ### 创建数据库 ~~~ <?php // 创建数据库 $sql = "CREATE DATABASE myDB"; if ($conn->query($sql) === TRUE) { echo "数据库创建成功"; } else { echo "Error creating database: " . $conn->error; } ?> ~~~ >[danger]执行sql语句,使用`query` > ### 创建数据表 ~~~ <?php // 使用 sql 创建数据表 $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 )"; 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) { echo "新记录插入成功"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } ?> ~~~ ### 插入多条数据 ~~~ <?php $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Mary', 'Moe', 'mary@example.com');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Julie', 'Dooley', 'julie@example.com')"; if ($conn->multi_query($sql) === TRUE) { echo "新记录插入成功"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } ?> ~~~ ### 预处理语句 1. 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如: ~~~ INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?) ~~~ 2. 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。 3. 执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。 ### 相比于直接执行SQL语句,预处理语句有两个主要优点: 1. 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。 2. 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。 3. 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。 ~~~ <?php // 预处理及绑定 $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 = "Mary"; $lastname = "Moe"; $email = "mary@example.com"; $stmt->execute(); $firstname = "Julie"; $lastname = "Dooley"; $email = "julie@example.com"; $stmt->execute(); echo "新记录插入成功"; ?> ~~~ ### 读取数据 ~~~ <?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 结果"; } ?> ~~~ ## PDO操作Mysql数据库 ### 连接数据库 ~~~ <?php $servername = "localhost"; $username = "username"; $password = "password"; try { $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password); echo "连接成功"; } catch(PDOException $e) { echo $e->getMessage(); } ?> ~~~ ### 关闭数据库连接 ~~~ <?php $conn=null; ?> ~~~ ### 创建数据 ~~~ <?php $servername = "localhost"; $username = "username"; $password = "password"; try { $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password); // 设置 PDO 错误模式为异常 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "CREATE DATABASE myDBPDO"; // 使用 exec() ,因为没有结果返回 $conn->exec($sql); echo "数据库创建成功<br>"; } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?> ~~~ >[danger]PDO执行SQL语使用的:`$conn->exec($sql)`