[PHP] 07 - Json, XML and MySQL

前言


[Node.js] 09 - Connect with Databasephp

菜鳥JSON 教程【內容很少】html

PHP SimpleXML【大概瞭解下便可】mysql

SQL語句須要複習一遍:http://www.runoob.com/sql/sql-tutorial.htmlweb

 

 

MySQL


1、PHP 鏈接 MySQL

PHP 5 及以上版本建議使用如下方式鏈接 MySQL :sql

    • MySQLi extension ("i" 意爲 improved)
    • PDO (PHP Data Objects)

 

  • MySQLi - 面向對象
<?php
$servername = "localhost";
$username   = "username";
$password   = "password";
 
// 建立鏈接
$conn = new mysqli($servername, $username, $password);
 
// 檢測鏈接
if ($conn->connect_error) {
    die("鏈接失敗: " . $conn->connect_error);
} 
echo "鏈接成功";
?>

# 關閉鏈接
$conn->close();

 

  • MySQLi - 面向過程
<?php
$servername = "localhost";
$username   = "username";
$password   = "password";
 
// 建立鏈接
$conn = mysqli_connect($servername, $username, $password);
 
// 檢測鏈接
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "鏈接成功";
?>

# 關閉鏈接
mysqli_close($conn);

 

  • PDO - Only 面向對象
<?php
$servername = "localhost";
$username   = "username";
$password   = "password";
 
try {
    $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
    echo "鏈接成功"; 
}
catch(PDOException $e)
{
    echo $e->getMessage();
}
?>

# 關閉鏈接
$conn = null;

 

  • 鏈接與檢測示範
try{
    //解析config.ini文件,獲取數據庫鏈接參數
    $config = parse_ini_file(realpath(dirname(__FILE__) . '/config/config.ini'));
//對mysqli類進行實例化 $mysqli = new mysqli($config['host'], $config['username'], $config['password'], $config['dbname']);
if(mysqli_connect_errno()){         // 判斷是否成功鏈接上MySQL數據庫 throw new Exception('數據庫鏈接錯誤!'); // 若是鏈接錯誤,則拋出異常 }else{ echo '數據庫鏈接成功!'; // 打印鏈接成功的提示 } }catch (Exception $e){ // 捕獲異常 echo $e->getMessage(); // 打印異常信息 }

 

 

2、SQL 經常使用操做 

  • create 建立數據庫
<?php
$servername = "localhost";
$username   = "username";
$password   = "password";

// 建立鏈接
$conn = new mysqli($servername, $username, $password);
// 檢測鏈接 if ($conn->connect_error) { die("鏈接失敗: " . $conn->connect_error); } // 建立數據庫 $sql = "CREATE DATABASE myDB"; if ($conn->query($sql) === TRUE) { echo "數據庫建立成功"; } else { echo "Error creating database: " . $conn->error; } $conn->close(); ?>

Goto: http://www.runoob.com/php/php-mysql-create.html數據庫

 

  • create MySQL 表
<?php
$servername = "localhost";
$username   = "username";
$password   = "password";
$dbname     = "myDB";

// 建立鏈接
$conn = new mysqli($servername, $username, $password, $dbname);
// 檢測鏈接 if ($conn->connect_error) { die("鏈接失敗: " . $conn->connect_error); } --------------------------------------------------------------- // 使用 sql 建立數據表 $sql = "CREATE TABLE MyGuests (   id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,   firstname VARCHAR(30) NOT NULL,   lastname VARCHAR(30) NOT NULL,   email VARCHAR(50),   reg_date TIMESTAMP )"; if ($conn->query($sql) === TRUE) { echo "Table MyGuests created successfully"; } else { echo "建立數據表錯誤: " . $conn->error; } $conn->close(); ?>

 

  • select 查詢

Goto: PHP MySQL 讀取數據編程

mysql> set names utf8;
mysql> SELECT name FROM websites;
+---------------+
| name          |
+---------------+
| Google        |
| 淘寶        |
| 菜鳥教程  |
| 微博        |
| Facebook      |
| stackoverflow |
+---------------+
6 rows in set (0.00 sec)

 

  • insert 插入數據
<?php
$servername = "localhost";
$username   = "username";
$password   = "password";
$dbname     = "myDB";

// 建立鏈接
$conn = new mysqli($servername, $username, $password, $dbname);
// 檢測鏈接 if ($conn->connect_error) { die("鏈接失敗: " . $conn->connect_error); } $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com')"; if ($conn->query($sql) === TRUE) { echo "新記錄插入成功"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close(); ?>

 

  • insert 插入多條數據

注意變量sql後面的"點「。json

<?php
$servername = "localhost";
$username   = "username";
$password   = "password";
$dbname     = "myDB";
 
// 建立連接
$conn = new mysqli($servername, $username, $password, $dbname);
// 檢查連接 if ($conn->connect_error) { die("鏈接失敗: " . $conn->connect_error); } $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Mary', 'Moe', 'mary@example.com');"; $sql .= "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Julie', 'Dooley', 'julie@example.com')"; if ($conn->multi_query($sql) === TRUE) { echo "新記錄插入成功"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close(); ?>

 

  • Where 子句

[有返回值] 從 "Persons" 表中選取全部 FirstName='Peter' 的行:數組

<?php
$con=mysqli_connect("localhost","username","password","database");
// 檢測鏈接 if (mysqli_connect_errno()) { echo "鏈接失敗: " . mysqli_connect_error(); } $result = mysqli_query($con, "SELECT * FROM Persons WHERE FirstName='Peter'"); while($row = mysqli_fetch_array($result)) { echo $row['FirstName'] . " " . $row['LastName']; echo "<br>"; } ?>

 

  • Order By 關鍵詞
<?php
$con=mysqli_connect("localhost","username","password","database");
// 檢測鏈接 if (mysqli_connect_errno()) { echo "鏈接失敗: " . mysqli_connect_error(); } $result = mysqli_query($con, "SELECT * FROM Persons ORDER BY age"); while($row = mysqli_fetch_array($result)) { echo $row['FirstName']; echo " " . $row['LastName']; echo " " . $row['Age']; echo "<br>"; } mysqli_close($con); ?>

 

  • update 更新數據庫
<?php
$con=mysqli_connect("localhost","username","password","database");
// 檢測鏈接 if (mysqli_connect_errno()) { echo "鏈接失敗: " . mysqli_connect_error(); } mysqli_query($con,"UPDATE Persons SET Age=36 WHERE FirstName='Peter' AND LastName='Griffin'"); mysqli_close($con); ?>

 

  • Delete 數據
<?php
$con=mysqli_connect("localhost","username","password","database");
// 檢測鏈接 if (mysqli_connect_errno()) { echo "鏈接失敗: " . mysqli_connect_error(); } mysqli_query($con,"DELETE FROM Persons WHERE LastName='Griffin'"); mysqli_close($con); ?>

 

 

3、使用預處理語句

能夠經過建立代碼塊實現更簡單的讀取和管理。網絡

Goto: http://www.runoob.com/php/php-mysql-insert-multiple.html

<?php
$servername = "localhost";
$username   = "username";
$password   = "password";
$dbname     = "myDB";
 
// 建立鏈接
$conn = new mysqli($servername, $username, $password, $dbname);
// 檢測鏈接 if ($conn->connect_error) { die("鏈接失敗: " . $conn->connect_error);
}
else { $sql = "INSERT INTO MyGuests(firstname, lastname, email) VALUES(?, ?, ?)"; // 爲 mysqli_stmt_prepare() 初始化 statement 對象 $stmt = mysqli_stmt_init($conn); //預處理語句 if (mysqli_stmt_prepare($stmt, $sql)) { // 綁定參數 mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email); // 設置參數並執行 $firstname = 'John'; $lastname = 'Doe'; $email = 'john@example.com'; mysqli_stmt_execute($stmt); $firstname = 'Mary'; $lastname = 'Moe'; $email = 'mary@example.com'; mysqli_stmt_execute($stmt); $firstname = 'Julie'; $lastname = 'Dooley'; $email = 'julie@example.com'; mysqli_stmt_execute($stmt); } } ?>

 

Goto: PHP MySQL 預處理語句

/* IMPLEMENT */ 

 

 

4、PHP 數據庫 ODBC

ODBC 是一種應用程序編程接口(Application Programming Interface,API),使咱們有能力鏈接到某個數據源(好比一個 MS Access 數據庫)。

經過一個 ODBC 鏈接,您能夠鏈接到您的網絡中的任何計算機上的任何數據庫,只要 ODBC 鏈接是可用的。

    1. 首先建立一個數據庫鏈接,
    2. 接着建立一個結果集,
    3. 而後在 HTML 表格中顯示數據
<html>
<body>

<?php
$conn=odbc_connect('northwind','','');
if (!$conn)
{
    exit("鏈接失敗: " . $conn);
}

$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
if (!$rs)
{
    exit("SQL 語句錯誤");
}
echo "<table><tr>"; echo "<th>Companyname</th>"; echo "<th>Contactname</th></tr>"; while (odbc_fetch_row($rs)) { $compname=odbc_result($rs,"CompanyName"); $conname=odbc_result($rs,"ContactName"); echo "<tr><td>$compname</td>"; echo "<td>$conname</td></tr>"; }
odbc_close($conn); echo "</table>"; ?> </body> </html>

 

 

 

JSON


 

json_encode 對變量進行 JSON 編碼
json_decode 對 JSON 格式的字符串進行解碼,轉換爲 PHP 變量
json_last_error 返回最後發生的錯誤

 

1、編碼

<?php
   $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
   echo json_encode($arr);
?>


Array ----> Json
{"a":1,"b":2,"c":3,"d":4,"e":5}

 

<?php
   class Emp {
       public $name = "";
       public $hobbies  = "";
       public $birthdate = "";
   }
   $e = new Emp();
   $e->name = "sachin";
   $e->hobbies  = "sports";
   $e->birthdate = date('m/d/Y h:i:s a', "8/5/1974 12:20:03 p");
   $e->birthdate = date('m/d/Y h:i:s a', strtotime("8/5/1974 12:20:03"));

   echo json_encode($e);
?>

對象 ----> Json {
"name":"sachin","hobbies":"sports","birthdate":"08\/05\/1974 12:20:03 pm"}

 

 

2、解碼

<?php
   $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

   var_dump(json_decode($json));         // 返回對象,默認是false var_dump(json_decode($json, true));   // 返回數組 ?>

----------------------------------------------------------------
返回結果:
# 對象
object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) }
# 數組 array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) }

 

 

 

XML


Ref: XML 教程

 

1、Expat 是什麼?

如需讀取和更新 - 建立和處理 - 一個 XML 文檔,您須要 XML 解析器。

有兩種基本的 XML 解析器類型:

    • 基於樹的解析器:這種解析器把 XML 文檔轉換爲樹型結構。它分析整篇文檔,並提供了對樹中元素的訪問,例如文檔對象模型 (DOM)。
    • 基於事件的解析器:將 XML 文檔視爲一系列的事件。當某個具體的事件發生時,解析器會調用函數來處理。

Expat 解析器是基於事件的解析器。

基於事件的解析器集中在 XML 文檔的內容,而不是它們的結構。

正由於如此,基於事件的解析器可以比基於樹的解析器更快地訪問數據。

 

  • 對XML的要求

Expat 是不檢查有效性的解析器,忽略任何 DTD。

做爲一款基於事件、非驗證的 XML 解析器,Expat 快速且輕巧,十分適合 PHP 的 Web 應用程序。

註釋:XML 文檔必須形式良好,不然 Expat 會生成錯誤。

 

 

2、解析 XML

  • XML Expat 解析器

[1] 解析的對象

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

[2] 解析出的內容

-- Note --
To: Tove
From: Jani
Heading: Reminder
Message: Don't forget me this weekend!

[3] php 解析代碼

<?php
// 1. Initialize the XML parser
$parser=xml_parser_create();

// 2. Function to use at the start of an element
function start($parser, $element_name, $element_attrs)
{
  switch($element_name)
  {
    case "NOTE":
      echo "-- Note --<br>";
      break;
    case "TO":
      echo "To: ";
      break;
    case "FROM":
      echo "From: ";
      break;
    case "HEADING":
      echo "Heading: ";
      break;
    case "BODY":
      echo "Message: ";
  }
}

//Function to use at the end of an element
function stop($parser,$element_name)
{
  echo "<br>";
}

//Function to use when finding character data
function char($parser,$data)
{
  echo $data;
}

//Specify element handler
xml_set_element_handler($parser,"start","stop");

//Specify data handler
xml_set_character_data_handler($parser,"char");

//Open XML file
$fp=fopen("test.xml","r");

//Read data
while ($data=fread($fp,4096))
{
  xml_parse($parser,$data,feof($fp)) or 
  die (sprintf("XML Error: %s at line %d", 
  xml_error_string(xml_get_error_code($parser)),
  xml_get_current_line_number($parser)));
}

//Free the XML parser
xml_parser_free($parser);
?>

工做原理:

    1. 經過 xml_parser_create() 函數初始化 XML 解析器
    2. 建立配合不一樣事件處理程序的的函數
    3. 添加 xml_set_element_handler() 函數來定義,當解析器遇到開始和結束標籤時執行哪一個函數
    4. 添加 xml_set_character_data_handler() 函數來定義,當解析器遇到字符數據時執行哪一個函數
    5. 經過 xml_parse() 函數來解析文件 "test.xml"
    6. 萬一有錯誤的話,添加 xml_error_string() 函數把 XML 錯誤轉換爲文本說明
    7. 調用 xml_parser_free() 函數來釋放分配給 xml_parser_create() 函數的內存

 

  • PHP XML DOM 

W3C DOM 被分爲不一樣的部分(CoreXMLHTML)和不一樣的級別(DOM Level 1/2/3):

    1. Core DOM - 爲任何結構化文檔定義標準的對象集
    2. XML DOM - 爲 XML 文檔定義標準的對象集
    3. HTML DOM - 爲 HTML 文檔定義標準的對象集

 

  • PHP SimpleXML

PHP SimpleXML 處理最普通的 XML 任務,其他的任務則交由其它擴展處理。

SimpleXML 是 PHP 5 中的新特性。

SimpleXML 擴展提供了一種獲取 XML 元素的名稱和文本的簡單方式。

與 DOM 或 Expat 解析器相比,SimpleXML 僅僅用幾行代碼就能夠從 XML 元素中讀取文本數據。

Goto: http://www.runoob.com/php/php-xml-simplexml.html

相關文章
相關標籤/搜索