# mysql數據庫操作
>[success]PHP與Mysql可謂是黃金搭檔!所以必要熟練掌握相關的知識。雖然說現在PHP的開發大部分都在使用比較成熟的框架,但是掌握原生PHP操作Mysql是十分必要的。
>
## 常見PHP操作Mysql的方式
>[info] PHP連接Mysql的方式,有:mysql、msyqli、pdo
>
>[danger]`mysql`這種方式,目前基本上不使用了。
>
PHP 5 及以上版本建議使用以下方式連接 MySQL :
MySQLi extension ("i" 意為 improved)
PDO (PHP Data Objects)
## `mysqli`操作`Mysql`
>[success]`Mysqli`和`Mysql`在命令格式上基本上和操作上基本一致。
>
>[danger]mysqli的操作上有`面向對象`和`面向過程`兩種,不過在使用上都差不多。
### 連接`mysql`數據庫
1. 面向對象
~~~
<?php
$servername="127.0.0.1";
$username="root";
$password="HbhRrH666CJH2ciY";
$mydbname="databasename";
// 創建連接
$link=new mysqli($servername,$username,$password,$mydbname);
// 檢測連接
if($link->connect_error){
die("連接失敗".$link->connect_error);
}
echo "連接成功";
//關閉連接
$conn->close();
?>
~~~
2. 面向過程
~~~
<?php
$servername="127.0.0.1";
$username="root";
$password="HbhRrH666CJH2ciY";
$mydbname="databasename";
// 創建連接
$link=mysqli_connect($servername,$username,$password,$mydbname);
// 檢測連接
if(!$link){
die("連接失敗".mysqli_connect_error());
}
echo "連接成功";
//關閉連接
mysqli_close($conn);
?>
~~~
>[danger]判斷數據庫連接成功的方法,除了上述方式外,還可以使用`mysqli_connect_errno() `函數來判斷
### 創建數據庫
~~~
<?php
// 創建數據庫
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
echo "數據庫創建成功";
} else {
echo "Error creating database: " . $conn->error;
}
?>
~~~
>[danger]執行sql語句,使用`query`
>
### 創建數據表
~~~
<?php
// 使用 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;
}
?>
~~~
### 插入數據
~~~
<?php
$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;
}
?>
~~~
### 插入多條數據
~~~
<?php
$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;
}
?>
~~~
### 預處理語句
1. 預處理:創建 SQL 語句模板并發送到數據庫。預留的值使用參數 "?" 標記 。例如:
~~~
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
~~~
2. 數據庫解析,編譯,對SQL語句模板執行查詢優化,并存儲結果不輸出。
3. 執行:最后,將應用綁定的值傳遞給參數("?" 標記),數據庫執行語句。應用可以多次執行語句,如果參數的值不一樣。
### 相比于直接執行SQL語句,預處理語句有兩個主要優點:
1. 預處理語句大大減少了分析時間,只做了一次查詢(雖然語句多次執行)。
2. 綁定參數減少了服務器帶寬,你只需要發送查詢的參數,而不是整個語句。
3. 預處理語句針對SQL注入是非常有用的,因為參數值發送后使用不同的協議,保證了數據的合法性。
~~~
<?php
// 預處理及綁定
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
// 設置參數并執行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();
echo "新記錄插入成功";
?>
~~~
### 讀取數據
~~~
<?php
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 輸出數據
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 結果";
}
?>
~~~
## PDO操作Mysql數據庫
### 連接數據庫
~~~
<?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();
}
?>
~~~
### 關閉數據庫連接
~~~
<?php
$conn=null;
?>
~~~
### 創建數據
~~~
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
// 設置 PDO 錯誤模式為異常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE DATABASE myDBPDO";
// 使用 exec() ,因為沒有結果返回
$conn->exec($sql);
echo "數據庫創建成功<br>";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
~~~
>[danger]PDO執行SQL語使用的:`$conn->exec($sql)`
- 前言
- PHP獲取服務器信息
- PHP中的常用函數-新手必備知識
- 日期時間相關的函數
- 時區設置
- time函數
- strtotime 時間戳
- date函數
- mktime函數
- 聯合使用 date() 和 mktime()
- PHP數據類型相關的函數
- PHP數組相關的函數
- array函數
- 數組的排序
- sort()和rsort()函數
- asort()和arsort()函數
- ksort()和krsort()函數
- array_multisort()函數
- array_reverse函數
- 數組的遍歷
- 數組中新增和刪除元素
- 數組頭部插入和刪除元素
- 數組尾部插入和刪除元素
- 刪除數組中重復的元素
- 刪除數組中指定的元素
- 數組的合并
- 隨機/打亂已知數組
- range函數
- 數組去除重復
- PHP常用功能函數
- URL地址處理函數
- post/get請求
- PHP字符串相關的函數
- PHP文件系統
- PHP正則表達式
- 正則表達式語法規則
- POSIX擴展的正則表達式函數
- 查找字串函數
- 替換字符串函數
- Perl兼容的正則表達式函數
- PHP中類的應用
- 中文編碼
- 關于stdClass
- 變量相關函數
- unset
- PHP數值相關的函數
- 數值取整
- 開發工具與開發環境使用技巧
- sublime
- 常用插件
- Atom
- 常用插件
- 常見問題
- Visual Studio Code
- vscode常用插件
- 編程推薦字體
- MAC下開發常識
- MAC下的常用設置
- MAC下的常用開發工具
- MAC下XAMMP的常見問題
- Apache配置基礎
- PhpStrom
- php中的常見問題
- 文件上傳相關問題
- API接口中常見問題
- 關于緩沖區問題
- PHP中注意事項
- 條件判斷
- PHP文件管理模塊
- 文件管理源碼
- 文件管理的常用函數
- 文件管理中文亂碼處理
- 自定義功能函數
- 文件下載
- PHP常用頭信息定義匯總
- 常見PHP網頁木馬
- 加密算法
- 1. Base58可逆加密
- 2. AES加密/解密
- mysql數據庫操作
- 命令行操作Mysql常用令行-查詢
- 命令行操作Mysql常用令行-操作
- Mysql使用中的技巧
- 在線數據庫管理中常用命令
- sql show命令
- mysql數據庫的備份與恢復
- 二進制日志介紹
- 二進制日志常用命令
- ThinkPHP
- 數據遷移
- 常見問題
- 驗證碼問題
- API接口中的異常處理
- API接口安全
- 解決跨域問題
- 自定義實用功能函數