如何将我的网站连接到MySQL数据库?
下面是我在Sublime中的代码,但数据库没有被调用。如何将我的网站连接到MySQL数据库?
<?php$username="root";
$password="changedpassword";$database="User";
$field1-name=$_POST['name'];
$field2-name=$_POST['password'];
$field3-name=$_POST['email'];
$field4-name=$_POST['sex'];
$field5-name=$_POST['school'];
$field6-name=$_POST['birth'];
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die("Unable to select database");
$query = "INSERT INTO create_user (name, password, email, sex, school, birth) VALUES('','$field1-name','$field2-name',
'$field3-name','$field4-name','$field5-name','$field6-name')";mysql_query($query);mysql_close();?>
让我们一步一步来看看。首先,这里是你当前的代码,整理了能够阅读:
<?php
$username = "root";
$password = "changedpassword";
$database = "User";
$field1_name = $_POST['name'];
$field2_name = $_POST['password'];
$field3_name = $_POST['email'];
$field4_name = $_POST['sex'];
$field5_name = $_POST['school'];
$field6_name = $_POST['birth'];
mysql_connect(localhost, $username, $password);
@mysql_select_db($database) or die("Unable to select database");
$query = "
INSERT INTO
create_user
(
name,
password,
email,
sex,
school,
birth
)
VALUES
(
'',
'$field1_name',
'$field2_name',
'$field3_name',
'$field4_name',
'$field5_name',
'$field6_name'
)
";
mysql_query($query);
mysql_close();
?>
我所做的只有两个变化(整理的空白,并用_name
代替-name
,如PHP变量不能包含连字符),但它已经一个很大的改进。代码不再是一个眼睛。它没有语法错误,并且可读。尽管如此,还是有很多问题。
首先,您会看到我们将七个值插入六列。这将是一个问题。修正了通过去除第一空白值:
$query = "
INSERT INTO
create_user
(
name,
password,
email,
sex,
school,
birth
)
VALUES
(
'$field1_name',
'$field2_name',
'$field3_name',
'$field4_name',
'$field5_name',
'$field6_name'
)
";
现在我们有一些可能实际工作。这是一种痛苦的不安全感,有很大的SQL注入攻击的可能性,并且它不适用于最新的PHP,因为mysql_
函数已被删除,但它实际上可能适合某处工作。你不想把它投入生产,但出于测试目的,我们正在某处。
MySQL自PHP 5.6起弃用,且不安全,请改为使用PDO或MySQLi。
与库MySQLi
<?php
//MySQLi information
$db_host = "localhost";
$db_username = "username";
$db_password = "password";
//connect to mysqli database (Host/Username/Password)
$connection = mysqli_connect($db_host, $db_username, $db_password) or die("Error " . mysqli_error());
//select MySQLi dabatase table
$db = mysqli_select_db($connection, "table") or die("Error " . mysqli_error());
$field1_name = $_POST['name'];
$field2_name = $_POST['password'];
$field3_name = $_POST['email'];
$field4_name = $_POST['sex'];
$field5_name = $_POST['school'];
$field6_name = $_POST['birth'];
$query = mysqli_query($connection, "INSERT INTO create_user
(name, password, email, sex, school, birth) VALUES
(
'$field1_name',
'$field2_name',
'$field3_name',
'$field4_name',
'$field5_name',
'$field6_name'
)
");
使用连接这一点,你就会好的。我希望这对你有帮助!
仍然存在SQL注入问题在这里。而'$ _POST'变量可能是未定义的。我想提高我自己的答案,但我耗尽了时间。明天吧。 – TRiG
@TRiG是的,当然,仍然有机会获得SQL注入攻击,但不像使用MySQL。从来没有说过它是100%安全的。更安全的是使用预先准备的语句,但向他展示了这种方法,以便他能够理解它的级别,为什么$ _POST可能未定义?因为日期/性别应与复选框和选择选项一起使用?我只是解决了他发布的内容,并没有将它写出来。 为什么你把它作为一个竞赛谁张贴什么? –
@TRiG我没有挑战你,你可以张贴或改进你喜欢的任何东西。你评论的方式让我觉得你只是想让你的答案被贴出而没有别的。 –
您是否收到任何错误? –
[**不要在新代码**中使用'mysql_ *'函数](http://stackoverflow.com/q/12859942)。他们不再被维护[并被正式弃用](https://wiki.php.net/rfc/mysql_deprecation)。 请参阅[**红框**](http://php.net/mysql-connect)? 改为了解[*预准备语句*](http://en.wikipedia.org/wiki/Prepared_statement),并使用[PDO](http://php.net/pdo)或[MySQLi](http:///php.net/mysqli) - [这篇文章](http://php.net/manual/en/mysqlinfo.api.choosing.php)可以帮助你决定哪个。 – Qirel
应该完成一些合理的代码格式和变量命名 - 它也会帮助您调试代码。 – Qirel