PHP操作MySQL數據庫:MySQLi和PDO

首先要確定安裝好了MySQL數據庫並已啓動服務,MySQL安裝教程

1 MySQLi操作數據庫

使用前需要在php.ini取消”extension=mysqli“的註釋
在這裏插入圖片描述

1.1 連接數據庫

有兩種方式:
1、面向過程風格:

mysqli_connect(string $host, string $username, string $password, string $dbname, int $port, string $socket)
示例:
$db = mysqli_connect('localhost', 'root', '123', 'php_test');

2、面向對象風格:

mysqli::connect(string $host, string $username, string $password, string $dbname, int $port, string $socket)
示例:
$db = new mysqli('localhost', 'root', '123', 'php_test');
參數 描述
host 可選。規定主機名或IP地址
username 可選。規定 MySQL 用戶名。
password 可選。規定 MySQL 密碼。
dbname 可選。規定默認使用的數據庫。
port 可選。規定嘗試連接到 MySQL 服務器的端口號。
socket 可選。規定 socket 或要使用的已命名 pipe。

1.2 增刪改查

放一個簡單的表格作爲示例:
在這裏插入圖片描述
1、增

<?php
// 建立連接
$db = new mysqli('localhost', 'root', '123','php_test');
// 預設sql語句
$sql = "insert into tt (id, name) values (?, ?)";
// 參數
$id = 3;
$name = "test";
// 預執行sql語句
$stmt = $db->prepare($sql);
// 綁定參數到sql語句,注意第一個參數的字符數量要和後面的參數數量一致
$stmt->bind_param("ss", $id, $name);
// 執行語句
$stmt->execute();
// 關閉連接
$db->close();

執行結果
在這裏插入圖片描述
2、刪:基本和“增”的操作類似

<?php
$db = new mysqli('localhost', 'root', '123','php_test');
$sql = "delete from tt where id = ?";
$id = 3;
$stmt = $db->prepare($sql);
$stmt->bind_param("s", $id);
$stmt->execute();
$db->close();

執行結果
在這裏插入圖片描述
3、改:同類似“增”

<?php
$db = new mysqli('localhost', 'root', '123','php_test');
$sql = "update tt set name = ? where id = 2";
$name = "hello";
$stmt = $db->prepare($sql);
$stmt->bind_param("s", $name);
$stmt->execute();
$db->close();

執行結果
在這裏插入圖片描述
4、查

$db = new mysqli('localhost', 'root', '123','php_test');
$sql = "select * from tt";
$res = $db->query($sql);
while($arr = $res->fetch_array()){  // 包含關聯數組和索引數組
    var_dump($arr);
}
$res->free();  // 釋放查詢結果
$db->close();

查詢結果
在這裏插入圖片描述

常用的三種查詢方式
$res->fetch_array(); // 包含索引數組和關聯數組
$res->fetch_assoc(); // 只包含關聯數組
$res->fetch_row();   // 只包含索引數組 

2 PDO操作數據庫

PDO(PHP Data Objects)擴展爲PHP訪問任何數據庫定義了一個輕量級、一致性的接口。
使用前,注意再php.ini中取消“extension=pdo_mysql"的註釋。
在這裏插入圖片描述

2.1 連接數據庫

PDO::__construct($string $dsn, string $username, string $password, array $driver_options)

示例:

$dsn = "mysql:dbname=php_test;host=127.0.0.1";
$user = "root";
$password = "123";
try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo "連接失敗:" . $e->getMessage();
}
參數 描述
dsn 規定數據庫源名,包括主機名商品號和數據庫名稱。
username 可選。規定連接數據庫的用戶名。
password 可選。規定連接數據庫密碼。
driver_options 可選。規定連接數據庫的其他選項。

2.2 增刪改查

1、增

<?php
$dsn = "mysql:dbname=php_test;host=127.0.0.1";
$db = new PDO($dsn, "root", "123");
$sql = "insert into tt (id, name) values (3, 'PDO_add')";
$db->exec($sql);

執行結果
在這裏插入圖片描述
2、刪

<?php
$dsn = "mysql:dbname=php_test;host=127.0.0.1";
$db = new PDO($dsn, "root", "123");
$sql = "delete from tt where id = 3";
$db->exec($sql);

執行結果
在這裏插入圖片描述
3、改

<?php
$dsn = "mysql:dbname=php_test;host=127.0.0.1";
$db = new PDO($dsn, "root", "123");
$sql = "update tt set name = 'PDO_update' where id = 2";
$db->exec($sql);

執行結果
在這裏插入圖片描述
4、查

<?php
$dsn = "mysql:dbname=php_test;host=127.0.0.1";
$db = new PDO($dsn, "root", "123");
$sql = "select * from tt";
$res = $db->prepare($sql);
$res->execute();
$arr = $res->fetchAll();
var_dump($arr);

執行結果
在這裏插入圖片描述
除了使用fetchAll()以外,還可以使用fetch(),其作用是從一個PDOStatement對象相關的結果集中獲取下一行。

mixed PDOStatement::fetch (int $fetch_style, int $cursor_orientation, int $cursor_offset) 

示例

while($arr = $res->fetch(PDO::FETCH_OBJ)){
    var_dump($arr);
}

執行結果
在這裏插入圖片描述

參數 描述
fetch_style 可選。規定POD如何返回行。
cursor_orientation 可選。規定可滾動遊標,該值決定了哪一行將被返回給調用者。
cursor_offset 可選。規定可滾動遊標,此值指定結果集中想要獲取行的絕對行號。

下面是fetch_style的參數說明

fetch_style參數 描述
PDO::FETCH_ASSOC 返回一個索引爲結果集列名的數組。
PDO::FETCH_BOTH(默認) 返回一個索引爲結果集列名和以0開始的列號的數組。
PDO::FETCH_BOUND 返回 TRUE ,並分配結果集中的列值給 PDOStatement::bindColumn() 方法綁定的 PHP 變量。
PDO::FETCH_CLASS 返回一個請求類的新實例,映射結果集中的列名到類中對應的屬性名。
PDO::FETCH_INTO 更新一個被請求類已存在的實例,映射結果集中的列到類中命名的屬性。
PDO::FETCH_LAZY 結合使用 PDO::FETCH_BOTH 和 PDO::FETCH_OBJ,創建供用來訪問的對象變量名。
PDO::FETCH_NUM 返回一個索引爲以0開始的結果集列號的數組。
PDO::FETCH_OBJ 返回一個屬性名對應結果集列名的匿名對象。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章