php mysqli 操作數據庫
連接數據庫
在php5.3版本之后,想要連接數據庫有兩種方案,一種是通過
mysqli,另外外一種是通過pdo。本文主要說的是如果通過mysqli面向對象的寫法操作數據庫。
在連接數據庫之前,需要先通過變量存儲好數據庫的基本連接信息。
$servername = "localhost"; // 地址
$username = "root"; // 用戶名
$password = ""; // 密碼
然后可以將mysqli 實例化創建一個對象。並且將相關的參數傳入。
$m = new mysqli($servername,$username,$password);
然后可以來判斷一下是否出現了錯誤。
// 檢測連接是否成功
if($conn->connect_error){
die("連接失敗,錯誤:" . $conn->connect_error);
}
當然,連接之后需要將連接的數據庫關閉。
$conn->close();
完整的demo如下:
<?php
// php 連接Mysql
// 通過mysqli
// 采用面向對象的寫法來完成數據庫的連接
// 設置基礎數據庫信息
$servername = "localhost";
$username = "root";
$password = "";
// 創建連接
$conn = new mysqli($servername,$username,$password);
// 檢測連接是否成功
if($conn->connect_error){
die("連接失敗,錯誤:" . $conn->connect_error);
}
// 否則連接成功
echo "連接成功!";
// 連接之后,還需要將連接關閉
$conn->close();
?>
通過mysqli 創建數據庫
通過mysqli創建數據庫,首先我們需要保證數據庫的成功連接。
$servername = "localhost";
$username = "root";
$password = "";
// 創建連接
$conn = new mysqli($servername,$username,$password);
if($conn->connect_error){
die("連接失敗,錯誤:" . $conn->connect_error);
}
接下來通過變量保存好sql語句。
// 設置sql語句
$sql = "create database stu_01 default character set = 'utf8' ";
連接好數據庫之后,我們需要發送sql語句並且檢驗是否數據庫創建成功:
// 發送sql語句 並且驗證是否創建成功
if($conn->query($sql) === TRUE){
echo "數據庫創建成功.";
}else {
echo "數據庫創建失敗 ,錯誤信息為:" . $conn->error; // 如果失敗輸出錯誤信息
}
當然,最后不要忘記關閉數據庫。
// 關閉數據庫
$conn->close();
需要注意的是,如果你使用其他端口(默認為3306),為數據庫參數添加空字符串,如: new mysqli("localhost", "username", "password", "", port)
完整demo如下:
<?php
$servername = "localhost";
$username = "root";
$password = "";
// 創建連接
$conn = new mysqli($servername,$username,$password);
if($conn->connect_error){
die("連接失敗,錯誤:" . $conn->connect_error);
}
// 設置sql語句
$sql = "create database stu_01 default character set = 'utf8' ";
// 發送sql語句 並且驗證是否創建成功
if($conn->query($sql) === TRUE){
echo "數據庫創建成功.";
}else {
echo "數據庫創建失敗 ,錯誤信息為:" . $conn->error; // 如果失敗輸出錯誤信息
}
// 關閉數據庫
$conn->close();
?>
通過mysqi 創建數據表
通過mysqli創建數據表首先我們先來完成基本的數據庫連接操作,需要注意的是,因為我們是在數據庫中創建一個數據表,所以
需要在額外的配置一下數據庫的信息:
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "stu_01"; // 要操作的數據庫名
// 創建連接
$conn = new mysqli($servername,$username,$password,$dbname); // 第四個參數
if($conn->connect_error){
die("連接失敗,錯誤:" . $conn->connect_error);
}
接下來需要設定好創建數據表的sql語句。
create table stu_info(
id int(6) unsigned auto_increment primary key,
firstname varchar(30) not null,
lastname varchar(30) not null,
email varchar(50),
reg_date timestamp
)
關於sql 的數據類型,可以訪問 :https://www.runoob.com/sql/sql-datatypes.html。
上述sql的一些解釋:
NOT NULL - 每一行都必須含有值(不能為空),null 值是不允許的。
DEFAULT value - 設置默認值
UNSIGNED - 使用無符號數值類型,0 及正數
AUTO INCREMENT - 設置 MySQL 字段的值在新增記錄時每次自動增長 1
PRIMARY KEY - 設置數據表中每條記錄的唯一標識。 通常列的 PRIMARY KEY 設置為 ID 數值,與 AUTO_INCREMENT 一起使用。
每個表都應該有一個主鍵(本列為 "id" 列),主鍵必須包含唯一的值。
為了執行sql,可以將上面的sql語句存儲到一個變量當中:
// 使用sql 創建數據表
$sql = "create table stu_info(
id int(6) unsigned auto_increment primary key,
firstname varchar(30) not null,
lastname varchar(30) not null,
email varchar(50),
reg_date timestamp
)";
設置完了sql語句,可以直接通過query方法發送sql語句,並且判斷是否執行成功。
if($conn->query($sql) === TRUE){
echo "數據表創建成功。";
}else {
echo "數據表創建失敗,錯誤信息:" . $conn->error;
}
// 關閉數據庫連接
$conn->close();
完整的demo如下:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "stu_01";
// 創建連接
$conn = new mysqli($servername,$username,$password,$dbname);
if($conn->connect_error){
die("連接失敗,錯誤:" . $conn->connect_error);
}
// 使用sql 創建數據表
$sql = "create table stu_info(
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 "數據表創建成功。";
}else {
echo "數據表創建失敗,錯誤信息:" . $conn->error;
}
// 關閉數據庫連接
$conn->close();
?>
通過mysqli向數據表中插入信息
首先,連接數據庫並且確定數據庫連接無誤。
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "stu_01";
// 創建連接
$conn = new mysqli($servername,$username,$password,$dbname);
if($conn->connect_error){
die("連接失敗,錯誤:" . $conn->connect_error);
}
接下來設置sql語句:
// 設置插入數據的sql語句
$sql = "insert into stu_info(firstname,lastname,email) values('張三','張小三','zhangsan@qq.com')";
將設置好的sql語句發送:
// 發送sql 語句
if($conn->query($sql) === TRUE){
echo "新記錄添加成功!";
}else {
echo "新記錄添加失敗,錯誤信息:" . $conn->error;
}
// 關閉連接
$conn->close();
完整的demo如下:
<?php
header("Content-type:text/html;Charset=utf-8");
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "stu_02";
// 創建連接
$conn = new mysqli($servername,$username,$password,$dbname);
if($conn->connect_error){
die("連接失敗,錯誤:" . $conn->connect_error);
}
// 設置插入數據的sql語句
$sql = "insert into stu_info(firstname,lastname,email) values('張三','張小三','zhangsan@qq.com')";
// 發送sql 語句
if($conn->query($sql) === TRUE){
echo "新記錄添加成功!";
}else {
echo "新記錄添加失敗,錯誤信息:" . $conn->error;
}
// 關閉連接
$conn->close();
?>
如果存儲數據的時候出現亂碼,那么可以使用下面的代碼來解決:
mysqli_set_charset($conn,'utf8'); // 解決亂碼問題
完整demo如下:
<?php
header("Content-type:text/html;Charset=utf8");
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "stu_02";
$conn = new mysqli($servername,$username,$password,$dbname);
mysqli_set_charset($conn,'utf8'); // 解決亂碼問題
if($conn->connect_error){
echo "連接失敗,錯誤信息:" . $conn->connect_error;
}
// 設置sql語句
$sql = "insert into stu_info(firstname,lastname,email) values('李四','李小思','lisi@qq.com')";
// 發送sql
if($conn->query($sql) === TRUE) {
echo "新紀錄添加成功.";
}else {
echo "新紀錄添加失敗,錯誤信息:" . $conn->connect_error;
}
// 關閉
$conn->close();
上面我們向數據表中插入了一條信息,下面我們來嘗試一次性向數據庫中插入多條信息:
完整demo如下:
<?php
// 數據庫連接基本信息
header("Content-type:text/html;Charset=utf8");
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "stu_02";
$conn = new mysqli($servername,$username,$password,$dbname);
mysqli_set_charset($conn,'utf8'); // 解決亂碼問題
// 檢查鏈接
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
// 下面開始插入多條數據
$sql = "insert into stu_info(firstname,lastname,email) values('張三豐','張君寶','sanfeng@qq.com');";
// 使用.= 的形式進行sql語句連接
$sql .= "insert into stu_info(firstname,lastname,email) values('東方不敗','東方拜拜','dongfang@qq.com');";
// 發送sql
if($conn->multi_query($sql) === TRUE) {
echo "數據添加成功!";
}else{
echo "數據添加失敗,錯誤信息如下: " . $conn->connect_error;
}
// 關閉
$conn->close();
在上面的代碼中我們使用.=的形式進行sql語句拼接,從而實現一次性插入多條數據。
請注意,每個SQL語句必須用分號隔開。
在上面的代碼中,我們將query方法換成了multi_query()方法,可以順利的實現一次性插入多條數據。
通過mysqli 讀取數據
上面我們通過mysqli插入了數據,下面我們再來學習如何將數據讀取出來:
如果需要查詢全部數據:
<?php
// 數據庫連接基本信息
header("Content-type:text/html;Charset=utf8");
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "stu_02";
$conn = new mysqli($servername,$username,$password,$dbname);
mysqli_set_charset($conn,'utf8'); // 解決亂碼問題
// 檢查鏈接
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
// 設置sql 語句,查詢全部數據
$sql = "select * from stu_info";
// 發送sql語句,獲得查詢結果
$result = $conn->query($sql);
// 如果查詢的結果>0表示查詢成功,那么就可以將數據輸出
// 函數 num_rows() 判斷返回的數據。
// 如果返回的是多條數據,函數 fetch_assoc() 將結合集放入到關聯數組並循環輸出。
if($result->num_rows > 0) {
// 輸出數據
while($row = $result->fetch_assoc()){
echo "id" . $row['id'] . '- Name:' . $row['firstname'] . " " . $row['lastname'] . '<br>';
}
}else {
echo "暫無數據";
}
// 關閉
$conn->close();
在上面的demo中,我們使用的sql語句如下:
select * from stu_info;
上面的語句可以幫助我們查詢全部的數據,我們如果只是想要查詢一部分的數據也可以更改一下:
select id ,firstname,lastname from stu_info;
where語句的應用
我們在查詢數據的時候可以在原本的條件的基礎之上加上where條件,讓查找更加的精確,例如:
select * from stu_info where id > 3;
通過mysqli刪除數據
下面我們來通過mysqli刪除一下數據庫的數據。
<?php
// 數據庫連接基本信息
header("Content-type:text/html;Charset=utf8");
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "stu_02";
$conn = new mysqli($servername,$username,$password,$dbname);
mysqli_set_charset($conn,'utf8'); // 解決亂碼問題
// 檢查鏈接
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
// 設置sql
$sql = "delete from stu_info where lastname = '李小思';";
// 發送sql
if($conn->query($sql) === TRUE) {
echo "刪除成功";
}else {
echo "刪除失敗,錯誤信息為:" . $conn->connect_error;
}
$conn->close();
刪除數據時,一定要在
delete from stu_info后面加where 條件,否則整個數據表都會被清空。
通過mysqli 更改數據
最后再來說一下如何通過mysqli 更改mysql當中的數據.
完整demo如下:
<?php
// 數據庫連接基本信息
header("Content-type:text/html;Charset=utf8");
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "stu_02";
$conn = new mysqli($servername,$username,$password,$dbname);
mysqli_set_charset($conn,'utf8'); // 解決亂碼問題
// 檢查鏈接
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
// 設置sql語句
$sql = "update stu_info set firstname='張小三' where id = 3";
// 發送sql語句
if($conn->query($sql) === TRUE) {
echo "修改成功";
}else {
echo "修改失敗,錯誤信息:" . $conn->connect_error;
}
// 關閉
$conn->close();
常用sql語句總結
在上面的代碼中,我們嘗試了通過mysqli對mysql數據進行的增刪改查操作,其中較為核心的是,sql語句的使用。
下面我們來說一下常用的sql語句語法:
創建數據庫
create database 數據庫名 default character set = 'utf8';
創建數據表
create table 數據表名 (
-- 下面是表中的一些字段
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)
插入數據
insert into table_name (column1, column2, column3,...) values (value1, value2, value3,...)
讀取數據
select column_name(s) from table_name
如果傳入一個*,則表示搜索所有的數據:
select * from table_name
也可以在后面加入指定條件
select * from table_name where 條件
修改
update table_name
set column1=value, column2=value2,...
where some_column=some_value
刪除數據
delete from table_name
where some_column = some_value
