喵喵笨兔 の 喵喵的家~遊戲天地 - 首頁(上版面)
喵喵笨兔 の 喵喵的家~遊戲天地 - 首頁(左版面)
首  頁 最新消息 遊戲攻略 遊戲影片 遊戲圖片 下載區 學習分享 留言板 FB粉絲團
 喵喵笨兔 の 喵喵的家~遊戲天地 - PHP 連接 MySQL 資料庫,讓資料顯示於網頁上...and 相關函數簡述 (含PDO範例)

PHP 連接 MySQL 資料庫,讓資料顯示於網頁上...and 相關函數簡述 (含PDO範例)

php 連接 MySQL 資料庫

 以連接笨兔網站的 MySQL 資料庫,取得【學習分享】的資料來做展示,範例設定的 MySQL 相關名稱如下。若不知這些名稱所在,可參考笨兔另一篇隨手筆記【db_001】phpMyAdmin & MySQL 資料庫和資料表的建立、修改、刪除和備份 使用簡介

  • 伺服器名稱: localhost
  • 使用者帳號: root
  • 使用者密碼: 12345678
  • 資料庫名稱: pcgame
  • 資料表名稱: learn
  • 資料表欄位名稱: l_id、l_date、l_sort、l_number、l_description、l_url 共有6個欄位

範例程式碼:MySQL 函數寫法 - 若不更改變數名稱,基本上只要帶入相關名稱資料即可!(紅色字部份)

<?php    

/* 資料庫連線資訊 */
$dbhost = 'localhost'; //伺服器名稱
$dbuser = 'root'; //使用者名稱
$dbpass = '12345678'; //使用者密碼
$dbname = 'pcgame'; //資料庫名稱

/* 建立資料庫連線 或用mysql_pconnect()也可以*/
/* $存取指標 = mysql_connect("主機名稱或IP", "用戶帳號", "用戶密碼"); */
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error with MySQL connect') ; //or 後是顯示連接失敗訊息,可不用

/* 設定語系 */
mysql_query("SET NAMES 'UTF8'"); //避免做好的網頁顯示亂碼

/* 開啟資料庫 */
mysql_select_db($dbname);

/* 建立SQL statement */
$sql = "select * from learn limit 5"; //SQL資料表條件,笨兔只顯示5筆做展示,所以設limit 5

/* 執行SQL statement */
$result = mysql_query($sql) or die('MySQL query error'); //or後可有可無

/* while 迴圈撈取資料,輸入要顯示的欄位名稱。若懶得打名稱,直接輸入欄位排列順序數字索引,從0開始 */
/* 若執行以下兩行是不套用表格*/
// while($row = mysql_fetch_array($result)){
// echo $row['l_id']."_".$row['l_date']."_".$row['l_sort']."_".$row[3]."_".$row[4]."_".$row[5]."<br>"; }

/* 以套用表格來顯示資料唄 ^^*/
echo '<table>';
while($row = mysql_fetch_array($result)){
echo '<tr>';
echo '<td>'.$row[0].'</td>';
echo '<td>'.$row[1].'</td>';
echo '<td>'.$row[2].'</td>';
echo '<td>'.$row['l_number'].'</td>';
echo '<td>'.$row['l_description'].'</td>';
echo '<td>'.$row['l_url'].'</td>';
echo '</tr>';
}
echo '</table>';

/* 關閉資料庫連線 */
mysql_close($conn);
?>

  • 若有許多 PHP 網頁程式連接同一個資料庫,可以把【資料庫連線資訊】到【建開啟資料庫】這一段重覆的資料另存一個 PHP 檔。之後再以 include("完整路徑檔名") 或 require_once("完整路徑檔名") 來讀入該檔即可。就不用每個連到此資料庫的網頁檔再重覆打這些連線資訊了!^^
  • 以上面的範例程式碼來更改做以下範例,其獲得的結果都是一樣的。

範例程式碼1:MySQL 函數寫法

  1. 假設將連線資訊另存成 login.php 檔,並放在 Connections 目錄內
  2. <?php

    $dbhost = 'localhost'; //伺服器名稱
    $dbuser = 'root'; //使用者名稱
    $dbpass = '12345678'; //使用者密碼
    $dbname = 'pcgame'; //資料庫名稱
    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error with MySQL connect') ; mysql_query("SET NAMES 'UTF8'"); mysql_select_db($dbname);
    ?>

  3. 假設執行的網頁檔為 run.php (此處欄位資料以 for 迴圈來產生)
  4. <?php
    include("Connections/login.php"); //載入連線資訊檔
    //或載入此行 require_once('Connections/login.php');
    //若有出現中文亂碼現象,再加入此行唄! mysql_query("SET NAMES 'UTF8'");
    $sql = "select * from learn limit 5";
    $result = mysql_query($sql) or die('MySQL query error');
    $fdnum=mysql_num_fields($result); //返回結果集中行的fields數目,也就是一行內有幾個欄位啦! echo '<table>';
    while($row = mysql_fetch_array($result)){
    echo '<tr>'; for ($i=0; $i<$fdnum; $i++){
    echo '<td>'.$row[$i].'</td>';
    }
    echo '</tr>';
    }
    echo '</table>';
    mysql_close($conn);
    ?>

範例程式碼2:PDO 函數寫法 (2019/7/5)

  1. 假設將連線資訊另存成 login.php 檔,並放在 Connections 目錄內
  2. <?php

    $dbhost = 'localhost'; //伺服器名稱
    $dbuser = 'root'; //使用者名稱
    $dbpass = '12345678'; //使用者密碼
    $dbname = 'pcgame'; //資料庫名稱
    try{
    $dsn = "mysql:host={$dbhost};dbname={$dbname};charset=utf8";
    $conn = new PDO($dsn, $dbuser, $dbpass);
    //發生錯誤出現錯誤提醒
    $conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }catch (PDOException $e){
    //發生錯誤結束資料庫連線並顯示錯誤訊息
    die($e -> getMessage());
    }
    ?>

  3. 假設執行的網頁檔為 run.php
  4. <?php
    include("Connections/login.php"); //載入連線資訊檔
    $sql = "SELECT * FROM learn limit 5";
    $rs = $conn -> prepare($sql);
    $rs -> execute();
    // while 迴圈撈取資料 echo '<table class="table">';
    while($row = $rs -> fetch()){
    echo '<tr>';
    echo '<td>'.$row[0].'</td>';
    echo '<td>'.$row[1].'</td>';
    echo '<td>'.$row[2].'</td>';
    echo '<td>'.$row['l_number'].'</td>';
    echo '<td>'.$row['l_description'].'</td>';
    echo '<td>'.$row['l_url'].'</td>';
    echo '</tr>';
    }
    echo '</table>';
    ?>

PDO函數範例結果:


12017-09-10遊戲game_001玩遊戲時的相容性問題參考解決法 (玩舊遊戲無法PLAY或執行修改器無作用)game_001.html
142017-09-12網頁html_002所架設的 php 網站無法開 https:// 的網址或有問題!& 電腦架站後本機連線測試正常,外網無法連線問題!html_002.html
152017-09-12網頁html_003Apache + PHP + MySQL 所架設的 php 網站,更改網頁根目錄及首頁預設檔!html_003.html
132017-09-12網頁html_001PHP 架站軟體 AppServ 懶人包:Apache + PHP + MySQL 相關介紹及說明 ^^html_001.html
162017-09-13網頁html_004讓網頁製作表格 (table) 的表格框變細,表格單、雙數行底色不同html_004.html

 


稍微簡述一下 MySQL 函數程式碼內的相關函數:

  1. mysql_num_fields():取得結果集中行的 fields 數目,也就是一行內有幾個欄位啦!
    若在上面的範例程式碼內輸入以下語法,得到的結果=6 (因為6個欄位)
    
    echo mysql_num_fields($result);
  2. mysql_num_rows():取得結果集中行的 rows (筆數),也就是全部有多少行啦!
    若在上面的範例程式碼內輸入以下語法,得到的結果=5 (因為全部只有5行)
    
    echo mysql_num_rows($result);
  3. mysql_field_name():取得結果中指定字段的字段(欄位)名稱。
    mysql_field_name(數據,從0開始第?個)
    若在上面的範例程式碼內輸入以下語法,得到的結果= l_id l_date l_sort l_number l_description l_url 
    
    $fdnum=mysql_num_fields($result);
      for ($i=0; $i<$fdnum; $i++){
    echo mysql_field_name($result,$i).' ';
    }
  4. mysql_fetch_array():將資料錄轉換為欄位陣列集合。
    資料錄轉換為欄位陣列集合的函數除了 mysql_fetch_array(),還有 mysql_fetch_assoc() 和 mysql_fetch_row(),其差別在於是否可讀取【數字】或【字串】索引值。
    以上面的範例程式碼來解說其差異性,要用那個就視個人所需唄!
    
    mysql_fetch_array():從資料集取得的陣列,讀取時索引值可用【數字】和【字串】。
     如:$row['l_id']、$row['l_number']、$row[0]、$row[3]
    
    mysql_fetch_assoc():從資料集取得的陣列,讀取時索引值只可用【字串】。
     如:$row['l_date']、$row['l_sort']
    
    mysql_fetch_row():從資料集取得的陣列,讀取時索引值只可用【數字】。
     如:$row[2]、$row[5]
  5. for (初始值; 條件式; 增加值) 迴圈
    for ($i=0; $i<10; $i++){
    echo $i;
    } 起始值$i=0,當$i小於10就執行迴圈,每次迴圈$i逐次+1,直到$i>=10就跳出迴圈。上列程式得到結果:0123456789 for ($i=2; $i<=10; $i=i+2){
    echo $i;
    } 起始值$i=2,當$i小於或等於10就執行迴圈,每次迴圈$i逐次+2直到$i>10就跳出迴圈。上列程式得到結果:246810

 ※PHP MySQL 語法連接資料庫相關應用,可參考笨兔其它隨手筆記:

 ※PHP 其它函數 MySQLi 和 PDO 連接資料庫相關應用,可參考笨兔の隨手筆記:

笨兔隨手筆記於 2017/10/19

喵喵笨兔 の 喵喵的家~遊戲天地
http://vv0817.tk
http://vvv.lionfree.net
http://qo3op.asuscomm.com/vvv
https://uoedgpkhyfwzmd7zua8myg-on.drv.tw/vvv