近期在學習PHP,這里總結一下PHP與MySQL的交互。
這里我們使用mysqli進行連接。
mysqli擴展允許我們訪問MySQL 4.1及以上版本提供的功能。
想深入了解mysqli的信息可以訪問下面的網站進行學習:
http://php.net/manual/zh/book.mysqli.php
這里我們根據幾個例子來簡單了解交互方式。
環境:
wampServer+sublime
創建數據庫
例子:建立名為mydb的數據庫
<?php /* 建立連接 其中第一個參數是服務器地址。 其中第二個參數是用戶名。 其中第三個參數是密碼。 這些參數需要自己查。 */ $con =new mysqli("localhost","root","123456"); //判斷連接是否成功 if (!$con){ //連接失敗輸出錯誤。 die('無法連接: ' . mysql_error()); } //生成SQL語句,創建數據庫mydb $sql = " CREATE DATABASE mydb "; //調用mysqli的query方法 if ($con->query($sql) === TRUE){ echo "創建成功"; }else{ echo "數據庫創建失敗: " . mysql_error(); } //關閉連接 $con->close(); ?>
創建數據表
例子:創建一個名User的數據表
SQL語句為:
CREATE TABLE User (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, password VARCHAR(20) NOT NULL, sex VARCHAR(20) NOT NULL, dob DATE NOT NULL, email VARCHAR(50) NOT NULL);
代碼:
<?php // 創建連接,這里多的參數是數據庫名稱。 $con = new mysqli("localhost","root","123456", "mydb"); // 檢測連接 if ($con->connect_error) { die("連接失敗: " . $con->connect_error); } // 使用 sql 創建數據表 $sql = "CREATE TABLE User ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, password VARCHAR(20) NOT NULL, sex VARCHAR(20) NOT NULL, dob DATE NOT NULL, email VARCHAR(50) NOT NULL );"; //調用mysqli的query方法 if ($con->query($sql)) { echo "Table User created successfully"; } else { echo "創建數據表錯誤: " . $con->error; } //關閉連接 $con->close(); ?>
數據的插入
我們向數據表里插入如下數據:
‘測試’, ‘12345678’,’man’,’2016-3-3’,’test@example.com’
SQL語句如下:
INSERT INTO User (name,password,sex,dob,email) VALUES ('測試', '12345678','man','2016-3-3','test@example.com');
代碼:
<?php // 創建連接 $con = new mysqli("localhost","root","123456", "mydb"); // 檢測連接 if ($con->connect_error) { die("連接失敗: " . $con->connect_error); } // 使用 sql 插入數據 $sql = "INSERT INTO User (name,password,sex,dob,email) VALUES ('測試', '12345678','man','2016-3-3','test@example.com')"; if ($con->query($sql)) { echo "數據插入成功"; } else { echo "插入錯誤: " . $con->error; } //關閉連接 $con->close(); ?>
數據的預處理
插入數據時為了提高效率和防止注入使用預處理方式。
使用如下語句:
INSERT INTO User (name,password,sex,dob,email) VALUES (?, ?,?,?,?);
在需要輸入的信息位置用?代替。
這里要用到如下語句:
1)prepare()–>mysqli_stmt mysqli_prepare ( mysqli
2)bind_param()–>將變量綁定到准備好的語句中。
3)execute() –>mysqli_stmt_execute() 執行預處理語句。
例子如下:
<?php
// 創建連接
$con = new mysqli("localhost","root","123456", "mydb");
// 檢測連接
if ($con->connect_error) {
die("連接失敗: " . $con->connect_error);
}
//sql語句
$sql ="INSERT INTO User (name,password,sex,dob,email) VALUES (?, ?,?,?,?)";
// 預處理及綁定
$stmt = $con->prepare($sql);
/* bind_param() 設置每個'?'要裝入的值 第一個參數是設置后幾個參數的格式。 s->string, i->integer, d->double 第二個參數開始是上邊需要裝入的值。 */
$stmt->bind_param("sssss", $name, $password, $sex,$dob ,$email);
// 設置參數並執行
$name = "John";
$password = "111111111111";
$sex = "man";
$dob = "2015-2-2";
$email = "john@example.com";
// 執行預處理語句
$stmt->execute();
echo "新記錄插入成功";
//關閉預處理
$stmt->close();
//關閉連接
$con->close();
?>
數據查詢
查詢數據庫中的名字。
<?php // 創建連接 $con = new mysqli("localhost","root","123456", "mydb"); // 檢測連接 if ($con->connect_error) { die("連接失敗: " . $con->connect_error); } //查詢語句 $sql = "SELECT name FROM User"; $result = $con ->query($sql); //輸出數據 if($result->num_rows>0){ while($row =$result->fetch_assoc()){ echo $row["name"]."<br>"; } } $con->close(); ?>