【问题标题】:trouble in inserting record to database using PHP mysqli oops [closed]使用PHP mysqli oops将记录插入数据库时​​遇到麻烦[关闭]
【发布时间】:2016-11-27 06:09:31
【问题描述】:

我正在使用 PHP mysqli 来访问和插入记录到数据库以及准备好的语句,但是在某个地方有一个我无法弄清楚的错误.. 指出错误将非常有帮助

mailer.php

<?php 

class Submit {

    const DB = 'localhost',
          USER = 'test',
          PASS = '123456',
          DB_NAME = 'testing';


  private $mysql;


  public function __construct() {

      $this->mysql = new mysqli(self::DB , self::USER , self::PASS , self::DB_NAME);

      if ($this->mysql->connect_errno) {
          echo "Error: " . $this->mysql->connect_error;
          echo "<br>";
          echo "Error code: " . $this->mysql->connect_errno;
      }


    }

    public function addRecord($record) {

        $status = false;

        $query = "INSERT INTO mytable (name,message) VALUES (?,?)";
        $stmt = $this->mysql->prepare($query);

        if ( $stmt ) {

            $stmt->bind_param('ss', $record->name , $record->message);

            if ($stmt->execute()) {
                $status = ($stmt->affected_rows == 1) ? true : false;

                $stmt->fetch_object();
                $stmt->close();
            }
        }

        return $status;
    }

}


$submit = new Submit();

$result = null;

if (isset($_POST['submit']) ) {
    $name = isset($_POST['name']) ? trim($_POST['name']) : '';
    $message = isset($_POST['message']) ? trim($_POST['message']) : '';

    $result = $submit->addRecord($name,$message);

    if ($result) {
        echo "Message Saved";


    }
}

我也在使用来自外部文件的 ajax 调用,其中包含一个表单和脚本

index.php

<!DOCTYPE html>  
 <html>  
      <head>  
           <title>Contact Form | PHP, AJAX and MySQL</title>  
           <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />  
           <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>  
           <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>  
      </head>  
      <body>  
           <br /><br />  
           <div class="container" style="width:500px;">  
                <form id="submit_form">  
                    <label for="name">Name</label>  
                     <input type="text" name="name" id="name" class="form-control" />  
                     <br />  
                     <label for="message">Message</label>  
                     <textarea name="message" id="message" class="form-control"></textarea>  
                     <br />  
                     <input type="submit" name="submit" id="submit" class="btn btn-info" value="Submit" />  
                     <span id="error_message" class="text-danger"></span>  
                     <span id="success_message" class="text-success"></span>  
                </form>  
           </div>  
      </body>  
 </html>  
 <script> 

 jQuery(function($){  

        $('form#submit_form').submit(function(e){  
          e.preventDefault();
           var name = $(this).find('#name').val(),
               message = $(this).find('#message').val();  

           if(name == '' || message == '') {  
                $('#error_message').html("All Fields are required");  
           }  

           else {  
                $('#error_message').html('');  
                $.ajax({  
                     url:"mailer.php",  
                     method:"POST",  
                     data:{
                         name: name, 
                         message: message
                     },  
                     success:function(data){  
                          $("form").trigger("reset");  
                          $('#success_message').fadeIn().html(data).fadeOut(3000);  

                     }  
                });  
           }  
      });  
 });  

 </script>  

【问题讨论】:

  • "..但是某处有错误.." 好的。什么错误?请在问题中粘贴您的错误。
  • 没有具体错误..我实际上是指代码中的错误......记录没有插入数据库

标签: php jquery mysql ajax oop


【解决方案1】:

您为 addRecord() 方法提供了 2 个参数,但它只需要 1 个。但是,它似乎需要一个您未初始化的对象,因此我对其进行了调整,因此它采用了您提供的两个参数。

public function addRecord($name, $message) {

    $status = false;

    $query = "INSERT INTO mytable (name,message) VALUES (?,?)";
    $stmt = $this->mysql->prepare($query);

    if ( $stmt ) {

        $stmt->bind_param('ss', $name , $message);

        if ($stmt->execute()) {
            $status = $stmt->affected_rows === 1;
        }
    }
    return $status;
}

我还删除了方法中一些不必要的步骤:

$status = ($stmt->affected_rows == 1) ? true : false;
$status = $stmt->affected_rows === 1; 

比较本身将返回一个布尔值,因此无需使用显式结构。

$stmt->fetch_object();
$stmt->close();

在不使用对象的情况下获取对象是一种浪费。 当离开方法的作用域时,垃圾收集器会取消设置stmt。

测试功能的代码:

class Submit {

const DB = 'localhost',
      USER = 'test',
      PASS = '123456',
      DB_NAME = 'testing';
  private $mysql;

  public function __construct() {
      $this->mysql = new mysqli(self::DB , self::USER , self::PASS , self::DB_NAME);
      if ($this->mysql->connect_errno) {
          echo "Error: " . $this->mysql->connect_error;
          echo "<br>";
          echo "Error code: " . $this->mysql->connect_errno;
      }
    }

    public function addRecord($name, $message) {
        $status = false;
        $query = "INSERT INTO mytable (name,message) VALUES (?,?)";
        $stmt = $this->mysql->prepare($query);
        if ( $stmt ) {
            $stmt->bind_param('ss', $name , $message);
            if ($stmt->execute()) {
                $status = $stmt->affected_rows === 1;
            }
        }
        return $status;
    }
}


$submit = new Submit();

$result = null;
$name = "dsfdsf";
$message = "message";
$result = $submit->addRecord($name,$message);
var_dump($result); // bool(true) 

【讨论】:

  • 我修好了,但是记录还没有插入
  • 新代码是正确的。您是否检查过您是否收到了 $_POST 值?
  • 我稍微修改了代码,你说 addRecord 方法需要一个对象,所以我投射了它们..请看一下代码codeshare.io/CWu7L
  • 看起来不错,我复制粘贴了它,它适用于我的虚拟数据。在调用addRecord() 之前添加var_dump($_POST);exit; 以确保您拥有正确的数据
  • 我猜脚本有问题,更具体地说是 ajax 调用,甚至 vat_dump 都没有显示任何内容...我应该 json_decode ajax 调用中从 PHP 文件发送的内容吗??
猜你喜欢
  • 2016-05-15
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多