首先要確定安裝好了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 | 返回一個屬性名對應結果集列名的匿名對象。 |