PHP提供了很多函式來和MySQL做連接,在PHP5之後使用的是mysqli函式。
而常用的資料庫函式有:
mysqli_query()第二個參數帶的是MySQL指令,許多在MySQL上可用的指令都能帶進去。
若上網查詢如何從PHP連接MySQL,有時候會看到mysql的函式,若你的PHP版本>=5,會發現使用這些函式的時候會報錯。
那是因為PHP 5之後是用mysqli函式來驅動mysql資料庫的,mysqli可說是增強版的mysql函式,比mysql更穩定、安全、效率高。
mysql和mysqli函式雖然長得很像,但卻還是有許多不同之處,如括號中要帶的參數數量、類型不同等,使用時要特別注意你的PHP版本與連接資料庫的函式是否一致。
來看一下mysqli函式的使用範例:
<?php
// 建立連線
$db_link = mysqli_connect('localhost', 'root', '換成你的密碼', '換成你的database名稱') or die(mysqli_error());
// Query Database
$result = mysqli_query($db_link, "SELECT * FROM students");
// 將 query 結果取出
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
echo "id: {$row['id']}, name: {$row['name']}, score: {$row['score']},\n";
}
} else {
echo "0 row";
}
// 斷開連線
mysqli_close($db_link);
?>
結果:
id: 1, name: Rose, score: 87,
id: 2, name: Lisa, score: 88,
id: 3, name: Jisoo, score: 89,
id: 4, name: Jenny, score: 86,
解決方法:進入mysql這個database,檢查一下user table,root的plugin那欄如果是auth_socket就是報錯的原因了,應該改成mysql_native_password。
mysql> select user, plugin from mysql.user;
只要把auth_socket改成mysql_native_password就行了:
mysql> update mysql.user set authentication_string=PASSWORD('*****'), plugin='mysql_native_password' where user='root';
Query OK, 1 row affected, 1 warning (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
不過mysql 8.0之後authentication plugin預設就改為caching_sha2_password了,相較於用sha1為加密演算法的mysql_native_password,在安全性上較為嚴謹。而sha1、md5等加密演算法都有安全上的疑慮,因此上述的解法其實是不推薦的喔。