背景:
使用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。