PHP 連接 MySQL 資料庫,讓資料顯示於網頁上...and 相關函數簡述 (含PDO範例)
php 連接 MySQL 資料庫
以連接笨兔網站的 MySQL 資料庫,取得【學習分享】的資料來做展示,範例設定的 MySQL 相關名稱如下。若不知這些名稱所在,可參考笨兔另一篇隨手筆記【db_001】phpMyAdmin & MySQL 資料庫和資料表的建立、修改、刪除和備份 使用簡介。
範例程式碼: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);
?>
範例程式碼1:MySQL 函數寫法
login.php
檔,並放在 Connections
目錄內<?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);
?>
<?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)
login.php
檔,並放在 Connections
目錄內<?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());
}
?>
<?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函數範例結果:
1 | 2017-09-10 | 遊戲 | game_001 | 玩遊戲時的相容性問題參考解決法 (玩舊遊戲無法PLAY或執行修改器無作用) | game_001.html |
14 | 2017-09-12 | 網頁 | html_002 | 所架設的 php 網站無法開 https:// 的網址或有問題!& 電腦架站後本機連線測試正常,外網無法連線問題! | html_002.html |
15 | 2017-09-12 | 網頁 | html_003 | Apache + PHP + MySQL 所架設的 php 網站,更改網頁根目錄及首頁預設檔! | html_003.html |
13 | 2017-09-12 | 網頁 | html_001 | PHP 架站軟體 AppServ 懶人包:Apache + PHP + MySQL 相關介紹及說明 ^^ | html_001.html |
16 | 2017-09-13 | 網頁 | html_004 | 讓網頁製作表格 (table) 的表格框變細,表格單、雙數行底色不同 | html_004.html |
稍微簡述一下 MySQL 函數程式碼內的相關函數:
若在上面的範例程式碼內輸入以下語法,得到的結果=6 (因為6個欄位) echo mysql_num_fields($result);
若在上面的範例程式碼內輸入以下語法,得到的結果=5 (因為全部只有5行) echo mysql_num_rows($result);
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).' ';
}
資料錄轉換為欄位陣列集合的函數除了 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]
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 連接資料庫相關應用,可參考笨兔の隨手筆記: