iT邦幫忙

5

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 ('ddd@gmail.com','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


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
jh539548
iT邦新手 5 級 ‧ 2022-06-09 11:12:41

嗨~ 請問

0
jh539548
iT邦新手 5 級 ‧ 2022-06-09 11:13:36

想請問如果出現

Fatal error: Uncaught mysqli_sql_exception: Unknown character set: 'uff8' in E:\XAMPP\htdocs\Database\db.php:8 Stack trace: #0 E:\XAMPP\htdocs\Database\db.php(8): mysqli_query(Object(mysqli), 'SET NAMES uff8') #1 E:\XAMPP\htdocs\Database\index.php(3): require_once('E:\XAMPP\htdocs...') #2 {main} thrown in E:\XAMPP\htdocs\Database\db.php on line 8

該怎麼辦呢?

_378 iT邦新手 5 級 ‧ 2023-06-25 19:41:23 檢舉

雖然你應該解決了,但我還是說一下。
作者應該是打錯,uff8改成utf8應該就可以解決了歐

我要留言

立即登入留言