Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:拼装sql语句的方式很多, 我用array_walk()只是其中一种方式, 或者你还有更好的办法,想想看
DROP TABLE IF EXISTS `goods`;
create table `goods` (
`id` int unsigned not null auto_increment,
`name` varchar(20) COLLATE utf8mb4_unicode_ci not null,
`stock` int unsigned not null,
`price` float,
PRIMARY KEY(`id`)
)ENGINE=InnoDB auto_increment=1 default charset=utf8mb4 COLLATE=utf8mb4_unicode_ci;
<?php
namespace mysqli_eud;
return [
'type' => $type ?? 'mysql',
'host' => $host ?? 'localhost',
'charset' => $charset ?? 'utf8',
'dbname' => $dbname ?? 'phpedu',
'username' => $username ?? 'root',
'password' => $password ?? 'root'
];
<?php
namespace mysqli_edu;
use mysqli;
//1、引入数据库配置文件
$config = require __DIR__ . './config/database.php';
// 2. mysqli 连接四大参数
// 2.1 数据库的主机名: host
// 2.1 用户名: username
// 2.3 用户密码: password
// 2.4 默认的数据库 :dbname
/**
* @var string $host
* @var string $username
* @var string $password
* @var string $dbanme
* @var string $charset
*/
//将关联数组键值对转为变量的名值对
extract($config);
//2.链接数据库
$mysqli = new mysqli($host, $uername, $password, $dbname);
//3.判断是否链接成功
if ($mysqli->connect_errno) echo $mysqli->connect_error;
//4.设置客户端编码字符集
$mysqli->set_charset($charset);
// var_dump($mysqli);
<?php
namespace select;
use mysqli;
use mysqli_result;
//1.连接数据库
require 'connect.php';
//2.操作数据库
$sql = "select * from `goods`";
$mysqli_result = $mysqli->query($sql);
//指针复位
$mysqli_result->data_seek(0);
// var_dump($mysqli_result);
if ($mysqli_result && $mysqli_result->num_rows > 0) {
$goods = $mysqli_result->fetch_all();
foreach ($goods as $good) {
vprintf('<li>编号:%s , 名称: %s , 库存: %s, 价格: %s</li>', $good);
}
}
<?php
namespace insert;
use mysqli;
//1.链接数据库
require 'connect.php';
//2.数据库操作
$data = ['啤酒', '49', '5'];
array_walk($data, function (&$item, $key, $length) {
if ($key < $length - 1) $item = "'$item'";
}, count($data));
$str = implode(',', $data);
$sql = "insert `goods` (`name`, `stock`, `price`) values ($str)";
// echo $sql;
// die;
if ($mysqli->query($sql)) {
echo '成功添加了 ' . $mysqli->affected_rows . ' 条记录, 新增记录主键ID: ' . $mysqli->insert_id;
} else {
die('添加失败' . $mysqli->errno . ' : ' . $mysqli->error);
}
//3.关闭连接
$mysqli->close();
<?php
namespace update;
use mysqli;
require 'connect.php';
$arr = ['name' => '酸奶', 'stock' => 56, 'price' => 8];
array_walk($arr, function (&$item, $key) {
$item = "`$key` = '$item'";
});
$data = implode(', ', $arr);
$sql = "update `goods` set $data where `id` = 6";
// var_dump($sql);
// die;
if ($mysqli->query($sql)) {
if ($mysqli->affected_rows > 0) {
echo '成功更新了 ' . $mysqli->affected_rows . ' 条记录';
} else {
echo '没有更新任何记录';
}
} else {
die('更新失败' . $mysqli->errno . ' : ' . $mysqli->error);
}
// 3. 关闭连接
// 释放结果集
$mysqli->close();
<?php
namespace delete;
use mysqli;
//1.连接数据库
require "connect.php";
//2.数据库操作
$sql = "delete from `goods` where `id`=" . $_GET['id'];
if ($mysqli->query($sql)) {
if ($mysqli->affected_rows > 0) {
echo '成功删除了id=' . $_GET['id'] . '的记录';
}
} else {
die('删除失败' . $mysqli->errno . ':' . $mysqli->error);
}
总结:mysqli操作数据库和pdo操作数据库的步骤几乎差不多都是分成三步,连接数据库、数据库操作、关闭连接(可选)。重点是在第二部数据库的操作部分,特别是在增和改时,需要用到数组函数array_walk()对数据进行处理。