蘇州優(yōu)化網(wǎng)站建設(shè)seo知識(shí)培訓(xùn)
文章目錄
- 一、MySQL簡(jiǎn)介
- 二、MySQLi函數(shù)
- 1. 開(kāi)啟mysqli擴(kuò)展:
- 2. PHP MySQLi擴(kuò)展的常用函數(shù)
- 三、PHP與MySQL交互
- 0. 準(zhǔn)備
- 1. 創(chuàng)建連接(mysqli_connect() )
- 連接mysql語(yǔ)法
- 2. 選擇數(shù)據(jù)庫(kù)(mysqli_select_db())
- 3. 在php中操作數(shù)據(jù)庫(kù)執(zhí)行語(yǔ)句
- 1. 讀取.sql文件
- 2. 操作數(shù)據(jù)庫(kù)
- 4. 連接例子:
- 四、擴(kuò)展知識(shí)
- mysqli不能使用localhost的解決辦法
一、MySQL簡(jiǎn)介
MySQL是由瑞典MySQL AB公司(先后被Sun和Oracle公司收購(gòu))開(kāi)發(fā)的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),支持UNIX,Linux,macOS和Windows等平臺(tái)上使用。MySQL數(shù)據(jù)庫(kù)的默認(rèn)端口號(hào)為3306。
優(yōu)點(diǎn):體積小,速度快,使用更加方便快捷,且開(kāi)源。
特點(diǎn):
- 跨平臺(tái)性
- 可靠性
- 適用性
- 開(kāi)源免費(fèi)
注意:mysql數(shù)據(jù)庫(kù)操作時(shí),為了避免用戶(hù)自定義的數(shù)據(jù)庫(kù)名稱(chēng)、字段名稱(chēng)或數(shù)據(jù)表名稱(chēng)與系統(tǒng)命令沖突,最好使用反引號(hào)(`)包裹這些名稱(chēng)。
二、MySQLi函數(shù)
PHP作為一門(mén)編程語(yǔ)言,本身并不具備操作數(shù)據(jù)庫(kù)的功能。所以,若想要在項(xiàng)目開(kāi)發(fā)中完成PHP應(yīng)用和MySQL數(shù)據(jù)庫(kù)之間交互,就需要借助PHP提供的數(shù)據(jù)庫(kù)擴(kuò)展。PHP提供了許多數(shù)據(jù)庫(kù)擴(kuò)展,比較常用的有MySQL擴(kuò)展、MySQLi擴(kuò)展和PHP數(shù)據(jù)對(duì)象(PHP Data Objects, PDO)擴(kuò)展。而PHP MySQLi(PHP MySQL Improved)可以連接MySQL數(shù)據(jù)庫(kù)服務(wù)器。
注:MySQLi 擴(kuò)展被設(shè)計(jì)用于 MySQL 4.1.13 版本或更新的版本。
在使用 MySQLi 函數(shù)之前,必須打開(kāi) MySQLi 擴(kuò)展。
1. 開(kāi)啟mysqli擴(kuò)展:
-
檢查php的ext文件夾下面看是否有php_mysqli.dll文件
-
打開(kāi)php安裝目錄下的配置文件:php.ini
-
找到mysqli擴(kuò)展
;extension=mysqli.dll
-
將分號(hào)刪掉,并保存
-
重啟apache服務(wù)器即可。
2. PHP MySQLi擴(kuò)展的常用函數(shù)
函數(shù) | 描述 |
---|---|
mysqli_connect() | 連接MySQL服務(wù)器 |
mysqli_connect_error() | 獲取連接服務(wù)器時(shí)的錯(cuò)誤信息 |
mysqli_select_db() | 選擇數(shù)據(jù)庫(kù) |
mysqli_set_charset() | 設(shè)置客戶(hù)端字符集 |
mysqli_query() | 執(zhí)行SQL語(yǔ)句,寫(xiě)操作返回true或false,讀操作返回結(jié)果集對(duì)象 |
mysqli_insert_id() | 獲取上一次插入操作時(shí)產(chǎn)生的ID |
mysqli_affected_rows() | 獲取上一次操作時(shí)受影響的行數(shù) |
mysqli_errno() | 返回上一個(gè)MySQL操作中的錯(cuò)誤信息的錯(cuò)誤碼 |
mysqli_error() | 返回上一個(gè)MySQL操作中的錯(cuò)誤信息 |
mysqli_close() | 關(guān)閉數(shù)據(jù)庫(kù)連接 |
三、PHP與MySQL交互
PHP 通過(guò)內(nèi)置函數(shù)庫(kù) mysqli 進(jìn)行 MySQL 數(shù)據(jù)庫(kù)編程的步驟如下:
- 建立與 MySQL 數(shù)據(jù)服務(wù)器的連接(使用 mysqli_connect() 函數(shù));
- 選擇要進(jìn)行操作的數(shù)據(jù)庫(kù)(使用 mysqli_select_db() 函數(shù));
- 執(zhí)行數(shù)據(jù)庫(kù)的操作,如數(shù)據(jù)的添加刪除等(使用 mysqli_query() 函數(shù));
- 關(guān)閉與 MySQL 數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行的連接(使用 mysqli_close() 函數(shù));
0. 準(zhǔn)備
前提:apache、mysql、php安裝好了,且配置成功。(或者直接使用集成環(huán)境WampServer)
開(kāi)啟mysqli擴(kuò)展:
-
檢查php的ext文件夾下面看是否有php_mysqli.dll文件
-
打開(kāi)php安裝目錄下的配置文件:php.ini
-
找到mysqli擴(kuò)展
;extension=mysqli.dll
-
將分號(hào)刪掉,并保存
-
重啟apache服務(wù)器
1. 創(chuàng)建連接(mysqli_connect() )
連接mysql語(yǔ)法
PHP 可以通過(guò) mysqli 接口來(lái)連接 MySQL 數(shù)據(jù)庫(kù)服務(wù)器。mysqli 接口提供了mysqli_connect()函數(shù)進(jìn)行連接。語(yǔ)法格式如下:
$con = mysqli_connect("host_name", "user_name", "password", "mysqldb_name", "port"); // 連接mysql數(shù)據(jù)庫(kù)
-
@ 隱藏錯(cuò)誤
-
die() 條件顯示
-
mysqli_connect_error() 獲取連接數(shù)據(jù)庫(kù)的錯(cuò)誤信息
-
mysqli_connect_errno() 獲取連接數(shù)據(jù)庫(kù)的錯(cuò)誤編碼
-
mysqli_set_charset(連接對(duì)象,字符編碼)
說(shuō)明:
- host_name:主機(jī)名或者主機(jī)的 IP 地址,本章中默認(rèn)的主機(jī)名為“l(fā)ocalhost:3306”。
- user_name:用于登錄 MySQL 服務(wù)器的用戶(hù)名,默認(rèn)值為 root。
- pass_word:用戶(hù)登錄口令,默認(rèn)值為空。
- mysqldb_name:數(shù)據(jù)庫(kù)名
- port:端口號(hào),如果端口號(hào)是3306可省略
上述語(yǔ)句通過(guò) mysqli_connect()函數(shù)連接 MySQL 數(shù)據(jù)庫(kù)服務(wù)器并把此連接生成的對(duì)象傳遞給名為$con 的變量。在默認(rèn)情況下 MySQL 服務(wù)器的端口號(hào)為 3306,如果采用默認(rèn)端口號(hào),則可以不指定。如果采用了其他端口號(hào),則要特別指出,如 localhsot:3307。
mysqli_connect( )若成功執(zhí)行,則返回一個(gè)資源句柄型(連接標(biāo)識(shí)號(hào)),否者返回邏輯值 FALSE。mysqli_connect( )函數(shù)將返回值存放在一個(gè)變量中,在其他地方直接引用該變量即可。
2. 選擇數(shù)據(jù)庫(kù)(mysqli_select_db())
語(yǔ)法格式:
mysqli_select_db(數(shù)據(jù)庫(kù)服務(wù)器連接對(duì)象, "數(shù)據(jù)庫(kù)名")
如:
mysqli_select_db($conn, "book")
數(shù)據(jù)庫(kù)服務(wù)器連接對(duì)象或連資源句柄型用于指定相應(yīng)的與 MySQL 數(shù)據(jù)庫(kù)服務(wù)器相連的連接標(biāo)識(shí)號(hào),數(shù)據(jù)庫(kù)名為指定需要連接的數(shù)據(jù)庫(kù)名稱(chēng)。
3. 在php中操作數(shù)據(jù)庫(kù)執(zhí)行語(yǔ)句
1. 讀取.sql文件
使用PHP的file_get_contents函數(shù)讀取要導(dǎo)入的 .sql文件,并將其保存在變量中。
<?php
sql_file = "database.sql"; //.sql文件路徑sql_content = file_get_contents($sql_file); //讀取.sql文件中的內(nèi)容
?>
2. 操作數(shù)據(jù)庫(kù)
執(zhí)行語(yǔ)句模板為:
$變量名 = 'mysql執(zhí)行語(yǔ)句';
mysqli_query($連接名, $變量名);
舉例:
$sql = 'create database test';
mysqli_query($conn, $sql); // 數(shù)據(jù)庫(kù)執(zhí)行上面語(yǔ)句
4. 連接例子:
例1:
<?php$conn=mysqli_connect("localhost","wrong_user","my_password","my_db");// 檢查連接if (!$conn){die("連接錯(cuò)誤: " . mysqli_connect_error());}
?>
例2:
<?phpheader("Content-Type: text/html; charset=utf-8"); // 避免中文亂碼echo "你好";echo "<br>";$conn = mysqli_connect("localhost:3306", "root", "");var_dump($conn);echo "<br>";if(!mysqli_select_db($conn, "book")){ // 如果連接“book”庫(kù)失敗echo "連接失敗<-_->".mysqli_connect_error(); // 顯示連接失敗信息exit;}else{echo "連接成功"; // 顯示連接成功}
?>
瀏覽器輸出結(jié)果:
數(shù)據(jù)放在mysql安裝目錄下的data目錄下。
四、擴(kuò)展知識(shí)
mysqli不能使用localhost的解決辦法
使用mysqli_connect()連接時(shí),當(dāng)主機(jī)填寫(xiě)為localhost時(shí),MySQL會(huì)采用 unix domain socket連接,當(dāng)主機(jī)填寫(xiě)為127.0.0.1時(shí)MySQL會(huì)采用TCP/IP的方式連接。使用Unix socket的連接比TCP/IP的連接更加快速與安全。這是MySQL連接的特性,可以參考MySQL官方文檔4.2.4 Connecting to the MySQL Server Using Command Options
On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs:the client connects using a Unix socket file.
To ensure that the client makes a TCP/IP connection to the local server, use --host or -h to specify a host name value of 127.0.0.1 (instead of localhost), or the IP address or name of the local server. You can also specify the transport protocol explicitly, even for localhost, by using the --protocol=TCP option.
解決辦法:
- 將mysqli_connect()里的localhost后面加上端口號(hào),如我用的是3307端口(因?yàn)槲蚁螺d了兩個(gè)mysql數(shù)據(jù)庫(kù)服務(wù)器),寫(xiě)成:mysqli_connect(‘localhost:3307’, ‘root’, ‘root’)
- 使用TCP/IP代替Unix socket。即在連接的時(shí)候?qū)ocalhost換成127.0.0.1。
- 修改MySQL的配置文件my.cnf,指定mysql.socket的位置:
/var/lib/mysql/mysql.sock (你的mysql.socket路徑)。
- 直接在php建立連接的時(shí)候指定my.socket的位置(官方文檔:mysqli_connect)。比如:
$db = new MySQLi('localhost', 'root', 'root', 'my_db', '3306', '/var/run/mysqld/mysqld.sock')