欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

php mysqli操作数据库(CRUD)

程序员文章站 2022-06-01 17:05:40
...

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有两种预准备语句:一种是绑定结果,另一种是绑定参数。
预处理语句的工作原理如下:

  1. 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 “?” 标记 。例如:
$stmt = $conn->prepare("INSERT INTO news (title, content, create_at) VALUES(?, ?, ?)")
$stmt->bind_param("sss", $title, $content, $create_at);
  1. 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。
  2. 执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。

相比于直接执行SQL语句,预处理语句有两个主要优点:

  • 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。
  • 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
  • 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。

bind_paramtypes:绑定的变量的数据类型,它接受的字符种类包括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

相关标签: mysql