PHP & MySQL 连结资料库进行增、删、改、查

久违的练习一下,这次是以制作一个会员登入、注册的介面为目标所学习的一个历程,所用技术不外乎HTML、CSS、PHP、MySQL,主要以PHP串接MySQL为主,而本文章先以其核心功能增删改查做一个应用。

database & php

利用phpmyadmin创建好资料库。

https://ithelp.ithome.com.tw/upload/images/20201208/20126182vKBnM2z432.png

再来,我们要在php创建一个专门连结资料库的档案。
$host : 先设定资料库资讯,主机通常都用本机。
$dbuser : 以root管理者帐号进入资料库。
$dbpassword : root的资料库密码。
$dbname : 登入後要使用的资料库(名称)。
mysqli_connect连结资料库('资料库主机','登入帐号','登入密码','要开启的资料库名称')
接着利用if判断是否有成功连结资料库,有的话利用mysqli_query来针对我们指定的资料库,执行所要使用的sql语法。
mysqli_query用来使用资料库的语法,(connection要连结的资料库,query资料库语法,resultmode常数(可有可无)),此处无用到resultmode常数。
连结正确显示正确连接资料库,反之且显示错误资讯(利用mysqli_connect_error()来获取错误资讯)。

<?php
$host = 'localhost';
$dbuser ='root';
$dbpassword = '';
$dbname = 'member_db';
$link = mysqli_connect($host,$dbuser,$dbpassword,$dbname);
if($link){
    mysqli_query($link,'SET NAMES uff8');
    // echo "正确连接资料库";
}
else {
    echo "不正确连接资料库</br>" . mysqli_connect_error();
}
?>

再来我们制作一个页面(index),可以跳转至对应功能。
https://ithelp.ithome.com.tw/upload/images/20201208/20126182wOZrciRhay.png

在最上面来载入我们的db.php以连结资料库。

<?php
// 载入db.php来连结资料库
require_once 'db.php';
?>
<!doctype html>
<!-- lang代表网页主要语言,如果有设对於搜寻引擎是友善的,对於浏览器在判断是有帮助的 -->
<html lang="zh-Hant-TW">
...
...
<body>
<ul>
 <li><a href="select.php">SELECT,查询列出资料库的资料</a></li>
 <li><a href="insert.php">INSERT,新增资料到资料表</a></li>
 <li><a href="update.php">UPDATE,更新资料表中的资料</a></li>
 <li><a href="delete.php">DELETE,删除资料表中的资料</a></li>
 </ul>
</body>

select

首先我们一样连结资料库,并且设置一个空阵列($datas)来放我们查询回来的资料,而$sql则是放我们所要执行的sql语法并利用mysqli_query执行,并将结果存在变数($result)中。

<?php
// 载入db.php来连结资料库
require_once 'db.php';
?>
<h3>sql查询结果</h3>
<?php
// 设置一个空阵列来放资料
$datas = array();
// sql语法存在变数中
$sql = "SELECT `account`, `name` FROM `user` AS userData WHERE `id`=1 ";

// 用mysqli_query方法执行(sql语法)将结果存在变数中
$result = mysqli_query($link,$sql);

接着,利用if判断式,判断资料是否成功获取,如果有,我们可以利用mysqli_num_rows回传资料数量,做二次确认资料获取正确,如>0才会进入下一步,接着利用while回圈,搭配mysqli_fetch_assoc一次取得结果的一笔值,跑一次就抓一笔值,一个个放进阵列。

// 如果有资料
if ($result) {
    // mysqli_num_rows方法可以回传我们结果总共有几笔资料
    if (mysqli_num_rows($result)>0) {
        // 取得大於0代表有资料
        // while回圈会根据资料数量,决定跑的次数
        // mysqli_fetch_assoc方法可取得一笔值
        while ($row = mysqli_fetch_assoc($result)) {
            // 每跑一次回圈就抓一笔值,最後放进data阵列中
            $datas[] = $row;
        }
    }
    // 释放资料库查到的记忆体
    mysqli_free_result($result);
}
else {
    echo "{$sql} 语法执行失败,错误讯息: " . mysqli_error($link);
}
// 处理完後印出资料
if(!empty($result)){
    // 如果结果不为空,就利用print_r方法印出资料
    print_r($datas);
}
else {
    // 为空表示没资料
    echo "查无资料";
}
?>

而我们也可以使用foreach来呈现结果。
而在此处我们须特别注意:
左括号({)换成冒号(),把右括号(})分别换成endif、endwhile、endfor、endforeach、endswitch;
Ex:

<?php if( $a<0 ): ?>
小於0 <?php endif; ?> 
上面的语句等同於
<?php if( $a<0 ){
?> 小於0 <?php }?>

利用foreach取出row下的资料,account,name...,最後别忘记利用mysqli_close($link)结束资料库的连结。

<h3>foreach列出查询结果</h3>
<div>
<?php if(!empty($datas)): ?>
<ul>
<!-- 资料 as key(下标) => row(资料的row) -->
<?php foreach ($datas as $key => $row) :?>
<li>
第<?php echo($key +1 ); ?> 笔资料,帐号<?php echo $row['account']; ?>,名字 <?php echo $row['name']; ?>
</li>
<?php endforeach; ?>
</ul>
<?php else:  ?>
查无资料
<?php endif; ?>
</div>
<!-- 代表结束连线 -->
<?php mysqli_close($link); ?>

结果如下:
https://ithelp.ithome.com.tw/upload/images/20201208/20126182qUYvUrsmQN.png

insert

再来是我们的插入值,也就是新增资料,这边比较要注意的就是,判断的部分,我们使用mysqli_affected_rows来检查资料库数量的异动,有的话代表新增成功,并且使用mysqli_insert_id获取第一笔id,并且输出我们所新增的资料id即可。

<?php
// 载入db.php来连结资料库
require_once 'db.php';
?>

<h3>sql插入结果</h3>
<?php

// sql语法存在变数中
$sql = "INSERT INTO  `user` (`account`,`password`, `name`) VALUE ('[email protected]','dd12345','dd') ";

// 用mysqli_query方法执行(sql语法)将结果存在变数中
$result = mysqli_query($link,$sql);

// 如果有异动到资料库数量(更新资料库)
if (mysqli_affected_rows($link)>0) {
// 如果有一笔以上代表有更新
// mysqli_insert_id可以抓到第一笔的id
$new_id= mysqli_insert_id ($link);
echo "新增後的id为 {$new_id} ";
}
elseif(mysqli_affected_rows($link)==0) {
    echo "无资料新增";
}
else {
    echo "{$sql} 语法执行失败,错误讯息: " . mysqli_error($link);
}
 mysqli_close($link); 
 ?>

https://ithelp.ithome.com.tw/upload/images/20201208/20126182JuXKpj8Ca8.png

update

接着是更新资料,与新增资料大同小异,只有sql语法上的不同。

<?php
// 载入db.php来连结资料库
require_once 'db.php';
?>

<h3>sql更新结果</h3>
<?php

// sql语法存在变数中
$sql = "UPDATE  `user` SET `password` = '557gfg', `name`='87dd' WHERE `id`= 6;";
// 用mysqli_query方法执行(sql语法)将结果存在变数中
$result = mysqli_query($link,$sql);

// 如果有异动到资料库数量(更新资料库)
if (mysqli_affected_rows($link)>0) {
echo "资料已更新";
}
elseif(mysqli_affected_rows($link)==0) {
    echo "无资料更新";
}
else {
    echo "{$sql} 语法执行失败,错误讯息: " . mysqli_error($link);
}
 mysqli_close($link); 
 ?>

https://ithelp.ithome.com.tw/upload/images/20201208/201261828BsPjFeJz6.png

delete

最後是我们的删除,跟新增、更新大同小异。

<?php
// 载入db.php来连结资料库
require_once 'db.php';
?>

<h3>sql删除结果</h3>
<?php

// sql语法存在变数中
$sql = "DELETE FROM `user` WHERE `id`= 6;";
// 用mysqli_query方法执行(sql语法)将结果存在变数中
$result = mysqli_query($link,$sql);

// 如果有异动到资料库数量(更新资料库)
if (mysqli_affected_rows($link)>0) {
echo "资料已删除";
}
elseif(mysqli_affected_rows($link)==0) {
    echo "无资料删除";
}
else {
    echo "{$sql} 语法执行失败,错误讯息: " . mysqli_error($link);
}
 mysqli_close($link); 
 ?>

https://ithelp.ithome.com.tw/upload/images/20201208/20126182BeXVCYjZBI.png


<<:  [读书笔记] Threading in C# - PART 1: GETTING STARTED

>>:  Gulp bower(2) DAY86

[Day 3] Leetcode 848. Shifting Letters (C++)

前言 今天的题目在这里: 848. Shifting Letters,被归类为medium,乍看之下...

小产品跟大产品都可以通用的决策系统:Randomized AB Test

疫苗在台湾第一次吵得沸沸扬扬时,我也被各种有孔没笋的消息搞得莫名其妙,为了跟人争辩时不要说错话,闲人...

[Day 24] - React 取得永丰汇率api的json资料(2)

原来我跟javascript没那麽熟... 或者该说我把React想得太简单了呢 昨天原本用fetc...

.Net Core Web Api_笔记24_api结合EFCore资料库操作part2_产品分类资料新增_资料查询呈现(带入非同步API修饰)

接续上一篇 在Startup.cs中启用静态资源 於专案新增目录命名为wwwroot(会自动变成地球...

[Day10] Flutter - 文字输入元件 ( TextField )

前言 Hi, 我是鱼板伯爵今天要教大家 TextField 这个元件,这可以让使用者用键盘输入文字,...