iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 15
0

PHP提供了很多函式來和MySQL做連接,在PHP5之後使用的是mysqli函式。
而常用的資料庫函式有:

  • mysqli_connect("主機名稱","帳號","密碼",資料庫名稱"):與資料庫連接
  • mysqli_query($與資料庫的連接,"select * from 資料庫名稱"):從某資料庫中讀取所有的(*)資料表
  • mysqli_query($與資料庫的連接,"set names utf8"):從某資料庫中讀取所有的(*)資料表
  • mysqli_query($與資料庫的連接,"INSERT tableName(name, score) VALUES ('阿寶',87)"):新增資料

mysqli_query()第二個參數帶的是MySQL指令,許多在MySQL上可用的指令都能帶進去。

  • mysqli_num_rows($讀取資料表結果):回傳我們的資料有幾列
  • mysqli_fetch_assoc($讀取資料表結果):讀取該資料表中列的資料,回傳的是一個陣列資料。
  • mysqli_close($與資料庫的連接):斷開與資料庫的連線

若上網查詢如何從PHP連接MySQL,有時候會看到mysql的函式,若你的PHP版本>=5,會發現使用這些函式的時候會報錯。
那是因為PHP 5之後是用mysqli函式來驅動mysql資料庫的,mysqli可說是增強版的mysql函式,比mysql更穩定、安全、效率高。
mysql和mysqli函式雖然長得很像,但卻還是有許多不同之處,如括號中要帶的參數數量、類型不同等,使用時要特別注意你的PHP版本與連接資料庫的函式是否一致。

來看一下mysqli函式的使用範例:

<?php
    // 建立連線
    $db_link = mysqli_connect('localhost', 'root', '換成你的密碼', '換成你的database名稱') or die(mysqli_error());

    // Query Database
    $result = mysqli_query($db_link, "SELECT * FROM students");
    
    // 將 query 結果取出
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            echo "id: {$row['id']}, name: {$row['name']}, score: {$row['score']},\n";
        }
    } else {
        echo "0 row";
    }
    
    // 斷開連線
    mysqli_close($db_link);
?>

結果:

id: 1, name: Rose, score: 87,
id: 2, name: Lisa, score: 88,
id: 3, name: Jisoo, score: 89,
id: 4, name: Jenny, score: 86,

新手容易踩的坑:mysqli_connection error code 2054

解決方法:進入mysql這個database,檢查一下user table,root的plugin那欄如果是auth_socket就是報錯的原因了,應該改成mysql_native_password。

mysql> select user, plugin from mysql.user;

只要把auth_socket改成mysql_native_password就行了:

mysql> update mysql.user set authentication_string=PASSWORD('*****'), plugin='mysql_native_password' where user='root'; 
Query OK, 1 row affected, 1 warning (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 1 
mysql> flush privileges; 
Query OK, 0 rows affected (0.00 sec)

不過mysql 8.0之後authentication plugin預設就改為caching_sha2_password了,相較於用sha1為加密演算法的mysql_native_password,在安全性上較為嚴謹。而sha1、md5等加密演算法都有安全上的疑慮,因此上述的解法其實是不推薦的喔。


上一篇
Day 14 MySQL基本操作 + 亂碼解決方法
下一篇
Day 16 Git入門教學:將檔案加入版本控制系統下
系列文
後端基礎PHP+Mysql & Laravel 30日養成計畫36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言