【问题标题】:mysqli_query insert not generating any response, the connection is working, but no data is inserted [duplicate]mysqli_query插入未产生任何响应,连接正常,但没有插入数据[重复]
【发布时间】:2016-01-13 06:55:31
【问题描述】:

这是我的 PHP 脚本中的代码,位于带有表单的非常基本的 html 页面上。我已经尝试了单引号、双引号、单引号和双引号的所有可能变体。我根本没有得到任何回应。我已经测试以确保连接已建立,但数据库中没有插入任何内容。我只是不知道我做错了什么。

// Check our connection
if (mysqli_connect_errno($con)) {
    print_r("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

if(isset($_POST["submit"])){
    $name = $_POST['name'];
    $company = $_POST['company'];
    $email = $_POST['email'];
    $comment = $_POST['comment'];

     // Insert our data
    $query = mysqli_query("INSERT INTO 'contacts' ('id','name', 'company', 'email', 'comment')  VALUES ('','$name', '$company', '$email', '$comment')", $con);
    $result = ($query); 


    if( $result )
    {
        print_r('Success');
    }
    else
    {
        print_r('Query Failed');
    }
    mysqli_close($con);
}

【问题讨论】:

    标签: php mysql forms mysqli


    【解决方案1】:

    你的订单被颠倒了,http://php.net/manual/en/mysqli.query.php

    先连接,后查询。

    混合 mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

    您还错误地在列名周围使用了单引号;那些应该是反引号; When to use single quotes, double quotes, and backticks in MySQL

    此外,您永远不应该将用户输入直接传递给 SQL。这就是注射的发生方式。您应该考虑使用prepared statementsHow can I prevent SQL injection in PHP?

    if (mysqli_connect_errno($con)) {
            print_r("Connect failed: %s\n", mysqli_connect_error());
            exit();
    }
    if(isset($_POST["submit"])){ 
         $name = mysqli_real_escape_string($con, $_POST['name']);  
         $company = mysqli_real_escape_string($con,$_POST['company']);  
         $email = mysqli_real_escape_string($con,$_POST['email']);  
         $comment = mysqli_real_escape_string($con,$_POST['comment']);
         // Insert our data
         $query = mysqli_query($con, "INSERT INTO `contacts` (`name`, `company`, `email`, `comment`)  VALUES ('$name', '$company', '$email', '$comment')"); 
         if($query) {
              print_r('Success');
         } else {
              print_r('Query Failed');
         }
         mysqli_close($con);
    }
    

    【讨论】:

    • 如果投反对票,请发布原因(当前排名 2 DV;2 UV)。
    【解决方案2】:

    您的表名和列名无需使用撇号 (')。删除联系人表中的撇号。列名可以使用反引号 (`)。

    $query = mysqli_query($con, "INSERT INTO contacts (id, name, company, email, comment)  
                                         VALUES ('','$name', '$company', '$email', '$comment')");
    

    你也倾向于SQL injections,所以使用*_real_escape_string

    $name = mysqli_real_escape_string($con, $_POST['name']);  
    $company = mysqli_real_escape_string($con, $_POST['company']);  
    $email = mysqli_real_escape_string($con, $_POST['email']);  
    $comment = mysqli_real_escape_string($con, $_POST['comment']);
    

    当您使用mysqli_* API 时,您可能需要检查prepared statement

    【讨论】:

    • 所有引号/撇号应从列中删除。引号用于字符串。反引号用于列。
    猜你喜欢
    • 2014-12-04
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多