Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:看来昨晚的课认真听了, 不错
<?php
namespace mysqli_edu;
// 数据库连接配置参数
//$a ?? 0 等同于 isset($a) ? $a : 0。
//$a ?: 0 等同于 $a ? $a : 0。
return [
// 数据库的类型
'type' => $type ?? 'mysql',
// 数据库默认主机
'host' => $host?? 'localhost',
// 默认数据库
'dbname'=> $dbname ?? 'phpedu',
// 默认字符编码集
'charset'=> $charset ?? 'utf8',
// 默认端口号
'port'=> $port ?? '3306',
// 默认的用户名
'username'=> $username ?? 'root',
// 默认的用户密码
'password'=> $password ?? 'root',
];
<?php
namespace mysqli_edu;
use mysqli;
//1.加载外部的数据库连接
//__DIR__ :文件所在的目录
$config = require __DIR__ .'/config/database.php';
// echo __DIR__;
// var_dump($config);
// 2. mysqli 连接四大参数
// 2.1 数据库的主机名: host
// 2.1 用户名: username
// 2.3 用户密码: password
// 2.4 默认的数据库 :dbname
// $host = $config['host'];
// $dbname = $config['dbname'];
// $username = $config['username'];
// $password = $config['password'];
/**
* @var string $host
* @var string $username
* @var string $password
* @var string $dbanme
* @var string $charset
*/
//extract — 从数组中将变量导入到当前的符号表
extract($config);
// 将关联数组中的键值对, 转为变量的名值对
// 2. 连接数据库
$mysqli = new mysqli($host,$username,$password,$dbname);
// 3. 判断是否连接成功?
//connect_errno:返回最后一次连接数据库的错误代码 正确代码0
//connect_error: 返回最后一次连接数据库的错误描述,类型为字符串
if($mysqli->connect_errno) echo $mysqli->connect_error;
// 4. 设置客户端默认的字符编码集
$mysqli->set_charset($charset);
//查询1: 单条记录
// 1. 连接数据库
require 'connect.php';
//2.操作数据库
$sql = "SELECT `id`,`name`,`num`,`price`,`hot` FROM `goods` WHERE `price`>1";
// 查询使用:$mysqli->query($sql),
// 返回值
// 1. 如果是查询: 返回一个:结果集对象
// 2. 如果是写操作: 新增, 更新, 删除, 执行成功返回布尔值
// true:成功, false : 失败, 然后通过 affected_rows属性返回受影响的记录数量
$mysqli_result = $mysqli->query($sql);
var_dump($mysqli_result);
打印信息
object(mysqli_result)#2 (5) {
[“current_field”]=>
int(0)
[“field_count”]=>
int(5)
[“lengths”]=>
NULL
[“num_rows”]=>
int(2)
[“type”]=>
int(0)
}
默认为fetch_array(MYSQLI_BOTH)
// fetch_array():一次输出一条记录,并自动下移指针
$staff = $mysqli_result->fetch_array();
var_dump($staff);
$staff = $mysqli_result->fetch_array();
var_dump($staff);
打印
array(10) {
[0]=>
string(1) "1"
["id"]=>
string(1) "1"
[1]=>
string(6) "苹果"
["name"]=>
string(6) "苹果"
[2]=>
string(1) "5"
["num"]=>
string(1) "5"
[3]=>
string(1) "5"
["price"]=>
string(1) "5"
[4]=>
string(1) "0"
["hot"]=>
string(1) "0"
}
array(10) {
[0]=>
string(1) "3"
["id"]=>
string(1) "3"
[1]=>
string(3) "梨"
["name"]=>
string(3) "梨"
[2]=>
string(3) "200"
["num"]=>
string(3) "200"
[3]=>
string(1) "3"
["price"]=>
string(1) "3"
[4]=>
string(1) "0"
["hot"]=>
string(1) "0"
}
只返回关联部分:MYSQLI_ASSOC
$staff = $mysqli_result->fetch_array(MYSQLI_ASSOC);
printf('<pre>%s</pre>', print_r($staff, true));
打印
Array
(
[id] => 1
[name] => 苹果
[num] => 5
[price] => 5
[hot] => 0
)
只返回索引部分:MYSQLI_NUM
$staff = $mysqli_result->fetch_array(MYSQLI_NUM);
printf('<pre>%s</pre>', print_r($staff, true));
打印
Array
(
[0] => 1
[1] => 苹果
[2] => 5
[3] => 5
[4] => 0
)
// 指针复位
$mysqli_result->data_seek(0);
// 返回查询条数
// echo $mysqli_result->num_rows;
if($mysqli_result && $mysqli_result->num_rows > 0){
while($staff = $mysqli_result->fetch_assoc()){
printf('<pre>%s</pre>',print_r($staff,true));
}
} else {
echo '查询失败或没有查询到满足条件的商品';
}
// 3. 关闭连接
// 释放结果集
$mysqli_result->free_result();
$mysqli->close();
打印
Array
(
[id] => 1
[name] => 苹果
[num] => 5
[price] => 5
[hot] => 0
)
Array
(
[id] => 3
[name] => 梨
[num] => 200
[price] => 3
[hot] => 0
)
<?php
// 查询2: 多条记录
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据库
$sql = "SELECT `id`, `name`,`price` FROM `goods` WHERE `price` >1";
$mysqli_result = $mysqli->query($sql);
if ($mysqli_result && $mysqli_result->num_rows > 0 ) {
$staffs = $mysqli_result->fetch_all(MYSQLI_ASSOC);
foreach ($staffs as $staff) {
// vprintf() 与 printf()功能一样, 区别 就是参数是数组
vprintf('<li>编号: %s , 姓名: %s, 价格: %s</li>', $staff);
}
} else {
echo '查询失败或没有查询到满足条件的商品';
}
// 3. 关闭连接
// 释放结果集
$mysqli_result->free_result();
$mysqli->close();
打印
编号: 1 , 姓名: 苹果, 价格: 5
编号: 3 , 姓名: 梨, 价格: 3
<?php
//新增操作
//1.链接数据库
require 'connect.php';
// 2. 操作数据库
// 前端表单->json格式的字符串, php将这种json字符串转为数组/对象
$arr = ['哈密瓜',10,25,1,1588123456];
array_walk($arr,function(&$item,$key,$length){
if($key < $length-1){
$item = "'$item'";
}
},count($arr));
$data = implode(',',$arr);
$sql = "INSERT `goods` (`name`,`num`,`price`,`hot`,`add_time`) VALUE ($data)";
// var_dump($data);
// var_dump($sql);
if($mysqli->query($sql)) {
if ($mysqli->affected_rows > 0) {
echo '成功添加了 ' . $mysqli->affected_rows . ' 条记录, 新增记录主键ID: ' . $mysqli->insert_id;
} else {
echo '没有添加新记录';
}
} else {
die('添加失败'. $mysqli->errno . ' : ' . $mysqli->error);
}
// 3. 关闭连接
// 释放结果集
$mysqli->close();
打印
成功添加了 1 条记录, 新增记录主键ID: 7
修改 id name num price hot add_time
编辑 1 苹果 5 5 0 0
编辑 2 香蕉 10 1 0 0
编辑 3 梨 200 3 0 0
编辑 4 哈密瓜 10 25 1 0
编辑 5 哈密瓜 10 25 1 0
编辑 6 哈密瓜 10 25 1 0
编辑 7 哈密瓜 10 25 1 1588123456
<?php
//更新操作
//1.链接数据库
require 'connect.php';
// 2. 操作数据库
// 前端表单->json格式的字符串, php将这种json字符串转为数组/对象
$arr = ['name'=>'西瓜','price'=>30];
array_walk($arr,function(&$item,$key){
$item = "`$key` = '$item'";
});
$data = implode(',',$arr);
$sql = "UPDATE `goods` SET ". $data." WHERE `id` = 7";
// var_dump($data);
// var_dump($sql);
if($mysqli->query($sql)) {
if ($mysqli->affected_rows > 0) {
echo '成功更新了 ' . $mysqli->affected_rows . ' 条记录';
} else {
echo '没有更新任何记录';
}
} else {
die('更新失败'. $mysqli->errno . ' : ' . $mysqli->error);
}
// 3. 关闭连接
// 释放结果集
$mysqli->close();
打印
成功更新了 1 条记录
修改 id name num price hot add_time
编辑 1 苹果 5 5 0 0
编辑 2 香蕉 10 1 0 0
编辑 3 梨 200 3 0 0
编辑 4 哈密瓜 10 25 1 0
编辑 5 哈密瓜 10 25 1 0
编辑 6 哈密瓜 10 25 1 0
编辑 7 西瓜 10 30 1 1588123456
编辑 8 哈密瓜 10 25 1 1588123456
<?php
<?php
// 删除操作
// 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 {
echo '没有删除任何记录';
}
} else {
die('删除失败'. $mysqli->errno . ' : ' . $mysqli->error);
}
// 3. 关闭连接
// 释放结果集
$mysqli->close();
打印
修改 id name num price hot add_time
编辑 2 香蕉 10 1 0 0
编辑 3 梨 200 3 0 0
编辑 4 哈密瓜 10 25 1 0
编辑 5 哈密瓜 10 25 1 0
编辑 6 哈密瓜 10 25 1 0
编辑 7 西瓜 10 30 1 1588123456
编辑 8 哈密瓜 10 25 1 1588123456