MySQL + PHP


PHP連接MySQL有三種方式 : MySQL、MySQLi、PDO

因為MySQL連接方式在新版7.0已經不支援,所以不建議使用
使用這個函數phpversion(),可以知道你的PHP版本。

(1) 連接方式 : MySQLi Object-Oriented (物件導向的MySQLi)

<?php 
$host = 'localhost'; 
$dbuser ='user_name'; 
$dbpassword = 'user_password'; 
$dbname = 'db_name'; 

// Create connection 
$conn = new mysqli($host, $dbuser, $dbpassword); 

// Check connection 
if ($conn->connect_error) { 
die("連接失敗 : " . $conn->connect_error); 
echo "連接成功"; 
?>

程式說明 : 
以上藍色部分需要改成你自己的資料。
mysqli ($連接主機, $使用者帳號, $使用者密碼) 用來建立MySQL連線
使用 $conn = new mysqli($host, $dbuser, $dbpassword); 之後
就可以呼叫 $conn->connect_error ,若連接錯誤就輸出錯誤訊息


(2) 連接方式 : MySQLi Procedural (程序式的MySQLi)

<?php 
$host = 'localhost'; 
$dbuser ='user_name'; 
$dbpassword = 'user_password'; 
$dbname = 'db_name'; 

// Create connection 
$conn = mysqli_connect($host, $dbuser, $dbpassword); 

// Check connection 
if (!$conn) { 
die("連接失敗 : " . mysqli_connect_error()); 
echo "連接成功"; 
?>

程式說明 : 
以上藍色部分需要改成你自己的資料。
mysqli_connect($連接主機, $使用者帳號, $使用者密碼) 用來建立MySQL連線
使用 $conn = mysqli_connect($host, $dbuser, $dbpassword); 
就可以呼叫 mysqli_connect_error(),若連接錯誤就輸出錯誤訊息


(3) 連接方式 : PDO

<?php 
$host = 'localhost'; 
$dbuser ='user_name'; 
$dbpassword = 'user_password'; 
$dbname = 'db_name'; 

try { 
$conn = new PDO("mysql:host=$host;dbname=$dbname", $dbuser, $dbpassword); 

// set the PDO error mode to exception 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
echo "連接成功"; 
} catch(PDOException $e) { 
echo "連接失敗 : " . $e->getMessage(); 
?>

程式說明 : 
以上藍色部分需要改成你自己的資料。
$conn = new PDO("mysql:host=$連接主機;dbname=$資料庫名稱", $使用者帳戶, $使用者密碼); 

再來抓取資料

(4) 以 MySQLi Object-Oriented 連接方式抓取資料

<?php
$host = 'localhost'; 
$dbuser ='user_name'; 
$dbpassword = 'user_password'; 
$dbname = 'db_name'; 

// Create connection
$conn = new mysqli($host, $dbuser, $dbpassword, $dbname);
// Check connection
if ($conn->connect_error) {
  die("
連接失敗 : " . $conn->connect_error);
}

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
else {
  echo "沒有資料";
}
$conn->close();
?>

以上藍色部分需要改成你自己的資料。

(5) 以 MySQLi Procedural 連接方式抓取資料

<?php
$host = 'localhost'; 
$dbuser ='user_name'; 
$dbpassword = 'user_password'; 
$dbname = 'db_name'; 

// Create connection
$conn = mysqli_connect($host, $dbuser, $dbpassword, $dbname);
// Check connection
if (!$conn) {
  die("連接失敗 : " . mysqli_connect_error());
}

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
  // output data of each row
  while($row = mysqli_fetch_assoc($result)) {
    echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
  }
else {
  echo "沒有資料";
}

mysqli_close($conn);
?>

以上藍色部分需要改成你自己的資料。

(6) 以 PDO 連接方式抓取資料

<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th></tr>";

class TableRows extends RecursiveIteratorIterator {
  function __construct($it) {
    parent::__construct($it, self::LEAVES_ONLY);
  }

  function current() {
    return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
  }

  function beginChildren() {
    echo "<tr>";
  }

  function endChildren() {
    echo "</tr>" . "\n";
  }
}

$host = 'localhost'; 
$dbuser ='user_name'; 
$dbpassword = 'user_password'; 
$dbname = 'db_name'; 

try {
  $conn = new PDO("mysql:host=$host;dbname=$dbname", $dbuser, $dbpassword);
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests");
  $stmt->execute();

  // set the resulting array to associative
  $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
  foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
    echo $v;
  }
catch(PDOException $e) {
  echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>

以上藍色部分需要改成你自己的資料。

(7) 實際練習 ~ 建立 config.php

<?php 
$host = '主機名稱'; 
$dbuser ='使用者名稱'; 
$dbpassword = '使用者密碼'; 
$dbname = '資料庫名稱';

// Create connection 
$conn = new mysqli($host, $dbuser, $dbpassword, $dbname); 

// Check connection 
if ($conn->connect_error) { 
die("連接失敗 : " . $conn->connect_error); 
?>

以上藍色部分需要改成你自己的資料。

(8) 建立 testmysql.php 抓取資料

<?php 
// Include config file 
require_once "config.php"; 
$sql = "SELECT * FROM testdb"; 
$result = $conn->query($sql);

if (!$result) { die($conn->error); }

if ($result->num_rows > 0) { 
// output data of each row 
    while($row = $result->fetch_assoc()) {
    echo $row["testfield01"];
    echo "<br>".$row["testfield02"];
    }
}
$conn->close();
?>

以上藍色部分需要改成你自己的資料。

(9) 進行新增修改刪除

如果 
$sql = "INSERT INTO .....";
就可以執行 $result = $conn->query($sql); 
並輸出執行結果 echo mysqli_error($conn);

替換不同的 $sql 就能執行新增、修改、刪除。

參考資料 : 


張貼留言

0 留言