文章目录
前言
提示:这里可以添加本文要记录的大概内容:
PHP MySQL 简介
通过 PHP,我们可以连接和操作数据库。
MySQL 是跟 PHP 配套使用的最流行的开源数据库系统,PHP 与 MySQL 结合是跨平台的。
提示:以下是本篇文章正文内容,下面案例可供参考
一、PHP 连接 MySQL
连接 MySQL
在我们访问 MySQL 数据库前,我们需要先连接到数据库服务器:
实例
<?php
$servername = "localhost";
$username = "root";
$password = "password";
//数据库库名
$dbname = "haha";
//创建连接
$con = new mysqli($servername,$username,$password,$dbname);
//测试连接
if($con->connect_error){
die("connect_error".$con->connect_error);
}
else{
echo "yes";
}
//断开数据库连接
$con->close();
?>
注意: 当你创建一个新的数据库时,你必须为 mysqli 对象指定三个参数 (servername, username 和 password)。
实例运行如下:
数据库测试——连接成功√
补充:创建数据库代码
// 创建数据库
$sql = "CREATE DATABASE myDB";
if (mysqli_query($con, $sql)) {
echo "数据库创建成功";
} else {
echo "Error creating database: " . mysqli_error($con);
}
二、PHP 创建 MySQL 表
一个数据表有一个唯一名称,并有行和列组成。
CREATE TABLE 语句用于创建 MySQL 表。
创建表前,我们需要使用 use myDB 来选择要操作的数据库:
use myDB;
我们将创建一个名为 “MyGuests” 的表,有 5 个列: “id”, “firstname”, “lastname”, “email” 和 “reg_date”:
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
)
上表中的注意事项:
- NOT NULL - 每一行都必须含有值(不能为空),null 值是不允许的。
- DEFAULT value - 设置默认值
- UNSIGNED - 使用无符号数值类型,0 及正数
- AUTO INCREMENT - 设置 MySQL 字段的值在新增记录时每次自动增长 1
- PRIMARY KEY - 设置数据表中每条记录的唯一标识。 通常列的 PRIMARY
- KEY 设置为 ID 数值,与 AUTO_INCREMENT 一起使用。
每个表都应该有一个主键(本列为 "id" 列),主键必须包含唯一的值。
实例 (MySQLi - 面向对象)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 使用 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;
}
$conn->close();
?>
三、PHP MySQL 插入数据
1.简单实例
<?php
$servername = "localhost";
$username = "root";
$password = "password";
//数据库库名
$dbname = "haha";
//创建连接
$con = new mysqli($servername,$username,$password,$dbname);
//测试连接
if($con->connect_error){
die("connect_error".$con->connect_error);
}
else{
echo "Connected\r\n";
}
//增语句
$sql = "INSERT INTO table1(username,passwoad) VALUES('tom','123456')";
//检测是否成功
if($con->query($sql)==TRUE){
echo "insert succeeded";
}else{
echo "insert faild";
}
//断开数据库连接
$con->close();
?>
运行上述代码结果如下:
可以使用 MySQLi 或者 PDO 向 MySQL 插入数据
在创建完数据库和表后,我们可以向表中添加数据。
以下为一些语法规则:
PHP 中 SQL 查询语句必须使用引号
在 SQL 查询语句中的字符串值必须加引号
数值的值不需要引号
NULL 值不需要引号
INSERT INTO 语句通常用于向 MySQL 表添加新的记录:
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
在前面的中我们已经创建了表 “MyGuests”,表字段有: “id”, “firstname”, “lastname”, “email” 和 “reg_date”。 现在,让我们开始向表填充数据。
注意: 如果列设置 AUTO_INCREMENT (如 "id" 列) 或 TIMESTAMP (如 "reg_date" 列),,我们就不需要在 SQL 查询语句中指定值; MySQL 会自动为该列添加值。
以下实例向 “MyGuests” 表添加了新的记录:
实例(MySQLi - 面向对象)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$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;
}
$conn->close();
?>
实例 (MySQLi - 面向过程)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
if (mysqli_query($conn, $sql)) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
也可以使用 MySQLi 或者 PDO 向 MySQL 插入多条数据
mysqli_multi_query() 函数可用来执行多条SQL语句。
以下实例向 “MyGuests” 表添加了三条新的记录:
实例 (MySQLi - 面向对象)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建链接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查链接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$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;
}
$conn->close();
?>
注意:每个SQL语句必须用分号隔开。
当然还可以使用使用预处理语句——插入语句
mysqli 扩展提供了第二种方式用于插入语句。
我们可以预处理语句及绑定参数。
mysql 扩展可以不带数据发送语句或查询到mysql数据库。我们可以向列关联或 “绑定” 变量。
mysqli_stmt_bind_param() 中的代码:
mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
该函数绑定参数查询并将参数传递给数据库。第二个参数是 “sss” 。以下列表展示了参数的类型。 s 字符告诉 mysql 参数是字符串。
每个参数必须指定类型,来保证数据的安全性。通过类型的判断可以减少SQL注入漏洞带来的风险。
2.预处理语句
预处理语句对于防止 MySQL 注入是非常有用的。
预处理语句及绑定参数
预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。
预处理语句的工作原理如下:
预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 “?” 标记 。例如:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
MySQLi 预处理语句
以下实例在 MySQLi 中使用了预处理语句,并绑定了相应的参数:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 预处理及绑定
$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 "新记录插入成功";
$stmt->close();
$conn->close();
?>
四、PHP MySQL 读取数据
就是增删改查里面的“查”语句
从 MySQL 数据库读取数据
SELECT 语句用于从数据表中读取数据:
SELECT column_name(s) FROM table_name
我们可以使用 * 号来读取所有数据表中的字段:
SELECT * FROM table_name
简单的查语句↓
<?php
$servername = "localhost";
$username = "root";
$password = "password";
//数据库库名
$dbname = "haha";
//创建连接
$con = new mysqli($servername,$username,$password,$dbname);
//测试连接
if($con->connect_error){
die("connect_error".$con->connect_error);
}
else{
echo "Connected".'<br/>';
}
//查语句
$sql = "SELECT * FROM table WHERE id <10";
//执行sql语句并返回结果到$result结果集
$result = $con->query($sql);
//如果数据库可以取出东西
if ($result->num_rows>0) {
// 循环去查找result里面到所有内容
while($row = $result->fetch_assoc()){
echo $row['username'].'-----------'.$row['password'].'<br/>';
}
}else{
echo "Nothing";
}
//断开数据库连接
$con->close();
?>
使用 MySQLi
以下实例中我们从 myDB 数据库的 MyGuests 表读取了 id, firstname 和 lastname 列的数据并显示在页面上:
实例 (MySQLi - 面向对象)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$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 结果";
}
$conn->close();
?>
以上代码解析如下:
首先,我们设置了 SQL 语句从 MyGuests数据表中读取 id, firstname 和 lastname 三个字段。之后我们使用该 SQL 语句从数据库中取出结果集并赋给复制给变量 $result。
函数 num_rows() 判断返回的数据。
如果返回的是多条数据,函数 fetch_assoc() 将结合集放入到关联数组并循环输出。 while() 循环出结果集,并输出 id, firstname 和 lastname 三个字段值。
六、PHP MySQL Update
增删改查的“改”语句
UPDATE 语句用于中修改数据库表中的数据。
更新数据库中的数据
UPDATE 语句用于更新数据库表中已存在的记录。
首先还是一个简单实例👇
<?php
$servername = "localhost";
$username = "root";
$password = "password";
//数据库库名
$dbname = "haha";
//创建连接
$con = new mysqli($servername,$username,$password,$dbname);
//测试连接
if($con->connect_error){
die("connect_error".$con->connect_error);
}
else{
echo "Connected".'<br/>';
}
//改语句
$sql = "UPDATE table SET password='000000' WHERE username='test1'";
if ($con->query($sql)==TRUE) {
echo "secceeded";
}else{
echo "faild";
}
//断开数据库连接
$con->close();
?>
语法
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
注释:请注意 UPDATE 语法中的 WHERE 子句。WHERE 子句规定了哪些记录需要更新。如果您想省去 WHERE 子句,所有的记录都会被更新!
为了让 PHP 执行上面的语句,我们必须使用 mysqli_query() 函数。该函数用于向 MySQL 连接发送查询或命令。
七、PHP MySQL Delete
DELETE 语句用于从数据库表中删除行。
删除数据库中的数据
DELETE FROM 语句用于从数据库表中删除记录。
依旧是先上简单实例👇
<?php
$servername = "localhost";
$username = "root";
$password = "password";
//数据库库名
$dbname = "haha";
//创建连接
$con = new mysqli($servername,$username,$password,$dbname);
//测试连接
if($con->connect_error){
die("connect_error".$con->connect_error);
}
else{
echo "Connected".'<br/>';
}
//删语句
$sql = "DELETE FROM table WHERE username='test1'";
if ($con->query($sql)==TRUE) {
echo "succeeded";
}else{
echo "DELETE faild";
}
//断开数据库连接
$con->close();
?>
本地运行后结果为:
语法
DELETE FROM table_name
WHERE some_column = some_value
请注意 DELETE 语法中的 WHERE 子句。WHERE 子句规定了哪些记录需要删除。如果您想省去 WHERE 子句,所有的记录都会被删除!