我只想用php从表单中将数据插入数据库。我使用XAMPP在我的Localhost中运行下面的代码,一切都很好,但是我把它上传到我的主机它没有用。
问题是我为$ servername提出了什么,我应该何时寻找它?
有我的代码:
Register.php(在localhost中)
<?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:#");
}
?>
答案 0 :(得分:0)
如果您的MySQL数据库在SAME SERVER上作为您的PHP脚本,那么通常的逻辑方法是您的主机是localhost
。与您在本地计算机上使用的相同 - 因为它们位于同一台计算机上。
但是,如果您的MySQL数据库与您的PHP脚本分开在另一个服务器上,则需要使用Web地址访问该服务器,以便PHP连接到您的MySQL。
我们无法告诉您这是什么,您的服务器主机(您的MySQL服务器)将能够告诉您并为您提供正确的登录凭据。
我认为MySQL和PHP更常见的是在同一个磁盘上,特别是对于非专业系统,因此问题就是:
是否有MySQL errors或PDO errors(如果您与PDO连接)。不要重定向错误,而是将错误输出到日志文件中,这样您就可以阅读代码中的MySQL没有连接的原因。
您仍然可以将PHP设置为通过远程地址(例如servername=$_SERVER['SERVER_NAME'];
)与localhost 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风格进行编码,所以你几乎已经在那里了。
远程连接示例
<?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
。
答案 1 :(得分:0)
我向我的主机服务提供商询问了&#34; $ servername&#34;他们回答我说'&$ 34; $ serverneme&#34;是localhost
。