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