2017-01-06 159 views
-2

我只是想從表單插入數據到數據庫中,用php。我使用XAMPP在我的本地主機中運行了下面的代碼,並且一切都很好,但是我將其上傳到我的主機卻無法正常工作。什麼是服務器名稱

問題是我把$ servername放在什麼位置,我應該什麼時候查找它?

還有就是我的代碼:

Register.php(在本地主機)

<?php 

$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "test"; 

$Name = $_POST['Name']; 
$Username = $_POST['Username']; 
$Password = $_POST['Password']; 
$Email = $_POST['Email']; 

// Create connection 
$conn = mysqli_connect($servername, $username, $password, $dbname); 

// Check connection 
if ($conn->connect_error) { 
    header("Location:#"); 
} 

//Inserting Data 
try{ 
$sql = "INSERT INTO User (uName , uUsername , uPassword , uEmail) VALUES ('$Name' , '$Username' , '$Password' , '$Email')"; 
mysqli_query($conn, $sql); 
}catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 
$conn->close(); 
header("Location:#"); 
} 
?> 
+1

這是不是在mysqli文檔中解釋?檢查http://php.net/manual/en/mysqli.construct.php –

+0

「當我上傳到我的主機」可能意味着你想使用主機服務提供商資源。在這種情況下:我們不能告訴你,你將不得不問你的託管服務提供商的細節。但是,如果你自己操作這個「主機」,那麼使用一個虛擬或專用系統,那麼你自己應該知道這些值,這是我們無法幫助的。 – arkascha

+0

你是對的,但我想如果$ servername是一個不自然的事情。 我也與我的主機提供商交談,但我沒有回答。 – payamQorbanpour

回答

0

如果你的MySQL數據庫是在同一臺服務器上的PHP腳本,那麼通常的邏輯方法是,你的主機是localhost。與您在本地計算機上使用的一樣 - 因爲它們位於同一臺計算機上。

但是,如果您的MySQL數據庫位於另一臺服務器上與您的PHP腳本分離,則需要使用您的PHP的Web地址訪問該服務器以連接到您的MySQL。

我們無法告訴您這是什麼,您的服務器主機(您的MySQL服務器)將能夠告訴您併爲您提供正確的登錄憑證。

我相信這將是更常見的MySQL和PHP是在同一磁盤上,特別是對於非專業的系統,你似乎是,這樣的話,這個問題將是:

  • 是你的登錄詳細信息在您的服務器上設置正確嗎? (相同的用戶名/密碼)
  • 是否有任何MySQL errorsPDO errors(如果您連接PDO)。不要重定向錯誤,而是將錯誤輸出到日誌文件,以便您可以閱讀代碼中的MySQL未連接的原因。

  • 您仍然可以設置您的PHP通過遠程地址(如servername=$_SERVER['SERVER_NAME'];)與本地MySQL進行通信。 (參見下面的註釋)

  • 許多在線賬戶(在事情如的cPanel)會阻止你訪問MySQL作爲根,或者至少不會給你的MySQL的root密碼。使用root通過PHP訪問MySQL的步驟是不是一個好主意,而應該爲PHP設置一個特定的MySQL用戶,只需要讀取/寫入數據庫的足夠權限即可,僅此而已。

  • 如果你的MySQL是遠程的(不是localhost),那麼你可能還需要提供一個包含連接細節的端口號。通常的端口號是3306,但這是您需要從服務器主機知道的事情。

  • 立即一個header(Location:);切換指示後,你應該始終設置die();exit停止PHP處理腳本的其餘部分。

  • 您的SQL插入數據是高度可以被SQL注入和其他SQL攻擊和妥協。你應該真的,真的使用MySQL Prepared Statements,你已經編寫了OO風格,所以你幾乎已經在那裏。從the manual

    <?php 
    /*** 
    * Remember 3306 is only the default port number, and it could be 
    * anything. Check with your server hosts. 
    ***/ 
    
    $conn = new mysqli('remote.addr.org.uk', 'username', 'my_password', 'my_databasa', '3306'); 
    
    /*** 
    * This is the "official" OO way to do it, 
    * BUT $connect_error was broken until PHP 5.2.9 and 5.3.0. 
    ***/ 
    if ($conn->connect_error) { 
        error_log('MySQL Connect Error (' . $conn->connect_errno . ') ' 
          . $conn->connect_error); 
    } 
    
    /*** 
    * Upon failure, the above will output a connection error notice such as 
    * user not found or password incorrect. It won't explicity say these 
    * things but you should be able to deduce which from the notice 
    ***/ 
    
    echo "Success... \n" . $conn->host_info ; 
    
    $mysqli->close(); 
    

例遠程連接:我似乎認爲,MySQL的檢測時,給出的遠程地址是一樣的服務器地址,並自動將其轉換到localhost,但我不確定這一點。

長期和短期的是,如果你的MySQL 相同 服務器作爲PHP是沒有意義開闢了網絡環路發送 數據出來只是爲了拿回來再。改爲使用localhost

0

我問我的主機服務提供商有關「$ servername」,他們回答說「$ serverneme」是localhost