簡體   English   中英

從本地服務器連接到數據庫

[英]Connecting to a database from local server

我經營一個大型的PHP網站,其中一些頁面連接到MySQL數據庫,效果很好。 現在,我已經創建了一個本地測試服務器,並將我的PHP頁面和數據庫下載到了wamp服務器上,不需要數據庫連接的頁面可以正常工作。 但是,在使用數據庫的頁面上, mysql_connect()請求引發錯誤:

警告:mysql_connect():連接嘗試失敗,因為一段時間后連接方未正確響應,或者由於連接的主機未能響應,建立的連接失敗。

通過將PHP頁面上的MySQL請求更改為:

$server="localhost";
$user="root";
$password="";

留下$database="xxxx"; (原名)

這種解決方案意味着我必須使用MySQL請求更改每個頁面,然后在開發完成后將其更改回。

有沒有一種方法可以使原始MySQL連接請求正常工作,同時又將原始安全性數據保留在PHP頁面上? 例如,通過更改wamp服務器的config.inc.php文件?

我在config.inc.php文件中嘗試了多種組合,但似乎都無法使用。

正如我在評論中所說,如果您在每個文件中都硬編碼了mysql連接憑據,則只有兩種選擇:

  1. 替換每個文件中的憑據(進行大量搜索並替換)
  2. 將相同的憑據放入本地服務器。 如果代碼嘗試連接到遠程主機,則可以將該主機放入指向本地主機的主機文件中。 這樣,您可以模擬遠程環境。

一個好的解決方案是將這些信息保存在一個文件中,該文件包含在所有其他需要mysql連接的頁面中。

database.php

$server="localhost";
$user="root";
$password="";
$database = "nameofyourdb"

// Might event do the mysql_connect here

index.php或其他任何頁面

include_once('database.php');
// your code
// containing mysql_query() and so on

然后,當您從本地遷移到生產環境時,只需要將信息更改為一個文件即可。

甚至可以使用這樣的技巧來避免更改:

if ($_SERVER['SERVER_ADDR'] == '127.0.0.1') {
    // local
    $server="localhost";
    $user="root";
    $password="";
    $database = "nameofyourdb";
}
else {
    // production
    $server="localhost";
    $user="...";
    $password="...";
    $database = "...";
}

請謹慎使用已棄用的mysql API。 例如,您應該轉到PDO。

如先前的回答所述,您應該將連接參數簡單地移動到非人類可讀的文件中(即,如果可能的話,位於Web服務器根目錄之外)。 這樣,您可以安全地存儲它們,而不會冒着外部訪問的風險。

然后,將文件包含在需要的每個頁面中。 例子:

config.inc.php:

<?php
$db['host'] = '127.0.0.1';
$db['user'] = 'user';
$db['pw'] = 'passwd';
$db['name'] = 'dbname';

您甚至可以在此文件中發揮創意:

<?php
// Production settings
$db['host'] = '127.0.0.1';
$db['user'] = 'user';
$db['pw'] = 'passwd';
$db['name'] = 'dbname';

// Test/Sandbox settings
/* 
$db['host'] = '127.0.0.1';
$db['user'] = 'user';
$db['pw'] = 'passwd';
$db['name'] = 'dbname2';
*/

然后,只需在每次切換環境時切換注釋即可。

然后,僅將此文件包含在需要連接到數據庫的頁面中:

index.php:

<html><head><tltle>My page</title>
...HTML Code here...
<?php include_once("/path/to/config.inc.php"); // Again, store this file outside the web directory, if possible ?>
<?php mysqli_connect($db['host'],$db['user'],$db['pw'],$db['name']); ?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM