【问题标题】:What is servername什么是服务器名
【发布时间】:2017-05-21 01:40:30
【问题描述】:

我只是想用 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:#");
}
?>

【问题讨论】:

  • 这在mysqli文档中没有解释吗?检查php.net/manual/en/mysqli.construct.php
  • “当我将它上传到我的主机时”可能意味着您想使用主机服务提供商资源。在这种情况下:我们无法告诉您,您必须向您的托管服务提供商询问这些详细信息。但是,如果您自己操作该“主机”,因此使用虚拟或专用系统,那么您自己应该知道这些值,这也是我们无法帮助的。
  • 你是对的,但我认为如果 $servername 将是一个不自然的事情。我也和我的主机提供商谈过,但没有得到答复。
  • 请,不要使用mysql_xx 函数,由于安全问题,这些函数已被弃用甚至从 PHP7 中删除。使用mysqli 或PDO 代替php.net/manual/en/mysqlinfo.api.choosing.php
  • 你混淆了 mysql 和 mysqli。使用mysqli_query 而不是mysql_query

标签: php mysql database mysqli phpmyadmin


【解决方案1】:

如果您的 MySQL 数据库与您的 PHP 脚本位于同一服务器上,那么通常的逻辑方法是您的主机是 localhost。与您在本地计算机上使用的相同——因为它们在同一台机器上。

但是,如果您的 MySQL 数据库位于与您的 PHP 脚本分开的另一台服务器上,您将需要使用您的 PHP 连接到您的 MySQL 的 Web 地址访问该服务器。

我们无法告诉您那是什么,您的服务器主机(您的 MySQL 服务器)将能够告诉您并为您提供正确的登录凭据。

我相信 MySQL 和 PHP 在同一个磁盘上会更常见,尤其是对于非专业系统,如您所见,那么问题将是:

  • 您的登录详细信息是否在您的服务器上正确设置? (相同的用户名/密码)
  • 是否有MySQL errors 或PDO errors(如果您连接到 PDO)。不要重定向错误,而是将错误输出到日志文件,以便您了解代码中的 MySQL 未连接的原因。

  • 您仍然可以将 PHP 设置为通过远程地址(例如 servername=$_SERVER['SERVER_NAME'];)与本地 MySQL 通信。 (见下面的注释)

  • 许多在线帐户(例如 CPanel)会阻止您以 root 身份访问 MySQL,或者至少不会为您提供 root MySQL 密码。使用 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。

【讨论】:

    【解决方案2】:

    我向我的主机服务提供商询问了“$servername”,他们回答说“$serverneme”是localhost。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 2012-06-01
      • 2018-01-05
      • 2014-03-30
      • 2019-05-14
      • 2014-04-17
      • 2018-11-25
      相关资源
      最近更新 更多