php mysqli操作数据库(CRUD)
Mysqli提供了面向对象和面向过程两种方式来与数据库交互。
查询
面向过程风格的写法
<?php
$con = mysqli_connect("localhost","root","123456", "db_name");
if (mysqli_connect_errno($con))
{
die('Could not connect: ' . mysql_error());
}
mysqli_set_charset($con, 'UTF-8');
$sql = 'SELECT * FROM news';
$result = mysqli_query($con, $sql);
$data = mysqli_fetch_all($result);
var_dump($data);
mysqli_close($link);
面向对象风格的写法
$mysql = new Mysqli("localhost","root","123456", "db_name");
if($mysql -> connect_errno){
die('Could not connect:'.$mysql->connect_errno);
}
$mysql->set_charset('UTF-8');
$sql = 'SELECT * FROM news';
$result = $mysql->query($sql);
$data = $result -> fetch_all();
var_dump($data);
$mysql -> close();
mysqli
有四种读取数据库数据的方式,区别是:mysqli_fetch_array()
,返回关系型数组和计数型数组2种,读取数据的时候我们可以用比如:$result[1]
或者是$result["username"]
。mysqli_fetch_accoc()
,返回关系型数组,读取数据的时候我们可以用比如:$result["username"]
。mysqli_fetch_row()
,返回计数型数组,读取数据的时候我们可以用比如:$result[0]
。mysqli_fetch_object()
,返回一个对象,读取数据的时候我们可以用比如:$result->username
的方式读取数据。
插入
面向过程风格的写法
单挑sql,用mysqli_query
。
多条sql(用分号分隔开),用mysqli_multi_query
。
返回上次查询中所使用的自动生成的 ID:mysqli_insert_id()
。
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "db_name";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
$sql = "INSERT INTO `news` (`id`, `title`, `content`, `create_at`)
VALUES (NULL, '标题Test1', '内容Test1', '2020-08-01 10:52:48');
INSERT INTO `news` (`id`, `title`, `content`, `create_at`)
VALUES (NULL, '标题Test2', '内容Test2', '2020-08-01 10:52:48') ;";
if (mysqli_multi_query($conn, $sql)) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
面向对象风格的写法
单条sql,用query
。
多条sql(用分号分隔开),用multi_query
。
<?php
$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "db_name";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$sql = "INSERT INTO `news` (`id`, `title`, `content`, `create_at`) VALUES (NULL, '标题Test', '内容Test', '2020-08-01 10:52:48')";
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功,ID是".$conn->insert_id;
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
预处理
预处理语句对于防止 MySQL 注入是非常有用的。使用预准备语句可提高重复使用语句的性能,在PHP中,使用prepare()方法来进行预准备语句查询,使用execute()方法来执行预准备语句。PHP有两种预准备语句:一种是绑定结果,另一种是绑定参数。
预处理语句的工作原理如下:
- 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 “?” 标记 。例如:
$stmt = $conn->prepare("INSERT INTO news (title, content, create_at) VALUES(?, ?, ?)")
$stmt->bind_param("sss", $title, $content, $create_at);
- 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。
- 执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。
相比于直接执行SQL语句,预处理语句有两个主要优点:
- 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。
- 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
- 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。
bind_param
的types
:绑定的变量的数据类型,它接受的字符种类包括4个,如表所示。
字符种类 | 代表的数据类型 |
---|---|
i | integer |
d | double |
s | string |
b | blob |
查询
<?php
$id=4;
$conn = new mysqli("localhost","root","123456","db_name");
$query = "select * from news where id < ?";
$stmt = $conn->prepare($query);
$stmt->bind_param("i",$id); //绑定参数
$stmt->execute();
$stmt->bind_result($id,$title, $content,$create_at); //绑定结果
while ($stmt->fetch()) {
echo $id;
echo $title;
echo $content;
echo $create_at;
}
echo($stmt->num_rows); // 返回语句结果集中的行数
$stmt->close();
$conn->close();
插入
<?php
$post['title'] = 'title';
$post['content'] = 'content';
$post['create_at'] = '2021-03-04 00:00:00';
$conn = new mysqli("localhost","root","123456","db_name");
$query = "INSERT INTO news (title, content, create_at) VALUES(?, ?, ?)";
$stmt = $conn->prepare($query);
$stmt->bind_param("sss", $post['title'], $post['content'], $post['create_at']); //绑定参数
if($stmt->execute()){
var_dump($stmt->insert_id);
}
$stmt->close();
$conn->close();
删除、更新类似,这里就不赘述了。
参考
https://www.php.net/manual/zh/mysqli.summary.php
https://www.cnblogs.com/ZDPPU/p/5778889.html
上一篇: Mac显示和隐藏文件
下一篇: CRUD操作数据库
推荐阅读
-
php+mysqli使用预处理技术进行数据库查询的方法,mysqli预处理_PHP教程
-
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法_PHP教程
-
为什么无法使用php中mysqli的准备语句进行数据库中数据的查询(绑定参数或者绑定结果),项目急用!该如何处理
-
php开启mysqli扩展之后如何连接数据库
-
PHP数据库操作Helper类完整实例
-
PHP5中使用mysqli的prepare操作数据库的介绍
-
PHP使用PDO操作数据库的乱码问题解决方法
-
PHP连接数据库实现注册页面的增删改查操作
-
PHP5中使用mysqli的prepare操作数据库的介绍
-
PHP的Yii框架中使用数据库的配置和SQL操作实例教程