【问题标题】:Insert into MySQL is not working and there're no errors插入 MySQL 不起作用,也没有错误
【发布时间】:2013-10-11 19:59:48
【问题描述】:

我正在尝试将产品信息插入数据库,但我一定遗漏了一些东西。它不会向数据库中插入任何内容,甚至不会显示任何错误。

我的代码有什么问题?

<?php 

    if(!empty($product_name)){
        if(!empty($product_category)){

        ////////////////////////////////////////////////
        ///// connect to database
        ////////////////////////////////////////////////

        $dbc = new mysqli("localhost", "root", "password", "table");

        // Check connection
        if (mysqli_connect_errno($dbc)) {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }

        if (isset($_POST['product_name'])) {

            $pid = ($_POST['thisID']);
            $product_name = ($_POST['product_name']);
            $product_category = ($_POST['product_category']);
            $product_detail = ($_POST['product_detail']);
            $product_price = ($_POST['product_price']);
            $product_company = ($_POST['product_company']);

            $query = "INSERT INTO product (product_name, product_category, product_price, product_detail,product_detail, product_company)
                VALUES ( '$product_name','$product_category','$product_price','$product_detail','$product_company')";

            $result= $this->mysqli->query($query) or die(mysqli_connect_errno()."Data cannot inserted");

            if($result){
                header('location:cp_product.php');
            }

            mysqli_close($dbc);
        }
    }}

?>

【问题讨论】:

  • 你很容易受到SQL injection attacks的攻击。
  • 查询失败时不打印$mysqli-&gt;error怎么知道没有错误?
  • 不应该$this-&gt;mysqli-&gt;query$dbc-&gt;query

标签: php mysqli insert


【解决方案1】:

在您的查询中,您已经添加了两次product_detail 列,应该有一个,因为五列指的是 5 个值

product_detail,product_detail,

INSERT INTO product (product_name, product_category, product_price, product_detail, product_company)
VALUES ( '$product_name','$product_category','$product_price','$product_detail','$product_company');

【讨论】:

    【解决方案2】:

    product_detail 在插入查询中两次

    【讨论】:

      【解决方案3】:

      这一行是错误的:

          $result= $this->mysqli->query($query) or die(mysqli_connect_errno()."Data cannot inserted");
      

      应该是:

          $result = $dbc->query($query) or die ($dbc->error . "Data cannot be inserted");
      

      如果您这样做了,您会收到列列表与VALUES 列表不匹配的错误,因为您将product_detail 放入列列表中两次。

      【讨论】:

        【解决方案4】:

        我看到您将数据库称为“表”。
        您的数据库是否称为“表”? 首先试试这个并告诉我们您遇到了什么错误:
        不要将过程代码与面向对象的代码混合。检查 php.net 示例。 (现在删除所有“如果”。) $dbc = new mysqli("localhost", "root", "password", "table");

         // Check connection
         if (mysqli_connect_errno())
          {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
          }
        
         $pid = ($_POST['thisID']);
         $product_name = ($_POST['product_name']);
         $product_category = ($_POST['product_category']);
         $product_detail = ($_POST['product_detail']);
         $product_price = ($_POST['product_price']);
         $product_company = ($_POST['product_company']);
        
         $query = "INSERT INTO product (product_name, product_category, product_price, product_detail, product_company)  
          VALUES (   '$product_name','$product_category','$product_price','$product_detail','$product_company')";   
        
          echo "query: ".$query."<br>";
          mysqli->query($query);
        
          $mysqli->close(); //object oriented.
          ?>
        

        【讨论】:

          【解决方案5】:

          您需要在您设置的 HTML 表单变量中使用数据库连接,在本例中为 $dbc。

          $pid = ($dbc, $_POST['thisID']);
          $product_name = ($dbc, $_POST['product_name']);
          $product_category = ($dbc, $_POST['product_category']);
          $product_detail = ($dbc, $_POST['product_detail']);
          $product_price = ($dbc, $_POST['product_price']);
          $product_company = ($dbc,$_POST['product_company']);
          

          【讨论】:

            【解决方案6】:

            没有人这么说!你如何通过你的连接传递你的查询?

            你应该有类似的东西

            $dbc->query( $query )
            

            或者在你的情况下你在哪里分配$this-&gt;mysqli

            不要将面向对象的风格与程序风格混为一谈,因为这可能会在未来引起您的困惑。

            选择一个并继续以该风格进行编码。如果可以选择OOP。

            祝你好运

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-07-16
              • 1970-01-01
              • 2018-02-09
              • 1970-01-01
              • 2018-07-25
              • 2016-12-13
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多