背景:
使用lighttpd作為web服務器,php作為服務器腳本,mysql作為數據庫。當浏覽器客戶端訪問的時候,服務器php腳本會嘗試連接mysql,查詢數據並且返回給客戶端。但是在調試的過程中發生兩次,無法連接mysql的情況。這裡作一下記錄。
正文:
在php腳本中連接mysql比較簡單,先貼一下代碼
<span style="font-size:14px;"><?php
$servername = "192.168.110.2";
$port=3306;
$username = "username";
$password = "password";
$dbname = "testDB";
$socket="mysqli.default_socket";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname,$port,$socket);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?></span>
(1)上面這段代碼是可以運行的
如果在命令行界面中采用"php +腳本名稱"這樣的方式運行,代碼是可以順利打印出 mysql 中某個table的數據。
(2)但是當我通過web浏覽器訪問這個腳本的時候,卻沒有出現我想要的結果,代碼死在了 mysql 連接那裡。
後來分析了一下原因,應該是mysql配置參數的問題。
<span style="font-size:14px;">$server="192.168.110.2";</span>
這裡采用的是遠程連接mysql的方式,但是默認mysql安裝的時候,只監聽127.0.0 .1(也就是本機的IP)。
所以如果要讓mysql可以遠程訪問,需要配置mysql監聽的IP。
打開mysql的配置文件 /etc/mysql/my.cnf,把下面這行注釋掉。
bind-address = 127.0.0.1
(3)注釋完之後,還有一個問題需要注意
就是如果使用root用戶去遠程訪問mysql的時候,會彈出發生權限問題(在mysql本機調試的時候不會出現,但是遠程連接的時候會出現)。
解決辦法:創建一個普通用戶,並且為這個用戶添加修改或者查詢mysql的權限,然後使用這個普通用戶去訪問mysql。