2017-08-29 69 views
-2

下面是我在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();?> 
+2

您是否收到任何错误? –

+3

[**不要在新代码**中使用'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

+0

应该完成一些合理的代码格式和变量命名 - 它也会帮助您调试代码。 – Qirel

回答

0

让我们一步一步来看看。首先,这里是你当前的代码,整理了能够阅读:

<?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_函数已被删除,但它实际上可能适合某处工作。你不想把它投入生产,但出于测试目的,我们正在某处。

+0

好的,谢谢当我从别处拉这段代码我没有意识到我正在使用不正确的格式 – Nate

+0

我想继续告诉你如何解决这些问题,但我太累了想清楚。明天吧。 – TRiG

+0

我试着运行上面粘贴的所有额外值,但即便如此,一旦我加载本地主机并将信息输入到站点的登录页面,mysql数据库并未更新以反映新插入的信息 – Nate

0

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' 
       ) 
    "); 

使用连接这一点,你就会好的。我希望这对你有帮助!

+0

仍然存在SQL注入问题在这里。而'$ _POST'变量可能是未定义的。我想提高我自己的答案,但我耗尽了时间。明天吧。 – TRiG

+0

@TRiG是的,当然,仍然有机会获得SQL注入攻击,但不像使用MySQL。从来没有说过它是100%安全的。更安全的是使用预先准备的语句,但向他展示了这种方法,以便他能够理解它的级别,为什么$ _POST可能未定义?因为日期/性别应与复选框和选择选项一起使用?我只是解决了他发布的内容,并没有将它写出来。 为什么你把它作为一个竞赛谁张贴什么? –

+0

@TRiG我没有挑战你,你可以张贴或改进你喜欢的任何东西。你评论的方式让我觉得你只是想让你的答案被贴出而没有别的。 –