【问题标题】:Ajax insert data not returning response - PHP & MySQLAjax 插入数据不返回响应 - PHP & MySQL
【发布时间】:2020-01-31 05:55:28
【问题描述】:

我正在使用扫描仪阅读器,所以当扫描仪读取代码时,我使用了 ajax,它应该将数据插入数据库。问题是数据没有插入。

在脚本/Ajax里面——query是我用来获取数据的变量(名字)

  var query = $('#scanned-QR').val();
     fetch_customer_data(query);


      $(document).on('keyup', '#scanned-QR', function(){
       var query = $(this).val();
       fetch_customer_data(query);
      });

      function fetch_customer_data(query = '') 
      {

         $.ajax({
           url:"validScan.php",
           method: 'GET',
           data:{query:query},
           dataType: 'json',
           success:function(data) {
           console.log(data);
              if (data.status == '1') {

                decoder.stop();
                alert('Sucess!');

              }
              else if(data.status=='0'){

                 decoder.stop();
                 alert('Fail!');

              }

             },
               error:function(err){

               console.log(err);
             }
          });
       }

我的输入/文本区域

<textarea id="scanned-QR" name="scanQR" readonly></textarea>

MySQL

<?php
  ini_set('display_errors', 1);
  ini_set('display_startup_errors', 1);
  error_reporting(E_ALL);

  $link = mysqli_connect("localhost","root","");
  mysqli_select_db($link, "schedule");

  $query = $_GET['query'];

  $res = mysqli_query($link,"INSERT INTO attendance (name) VALUES ('$query')");


  if (mysqli_num_rows($res) > 0) {
        $respose = array('status'=>'1');//1 for success
        echo json_encode($respose );        
  } else {
        $respose = array('status'=>'0');//0 for fail
        echo json_encode($respose );        
  }
  mysqli_close($link);


?>

【问题讨论】:

  • 你能用echo mysqli_error($link); 发布错误消息吗?另外,你的attendance 表只有两列? (PK和名称),如果不是,可能其他列是“非空”,所以它引发了错误。
  • @piratefache ,是的,我这样做是有目的的,以最简单的方式尝试而不添加太多。实际上没有错误。数据没有插入,它确实提供了数据,但它是空白数据
  • 您可以打印 $query 以确保它不为空。同样在您的查询中,您可以像这样单引号您的列名:INSERT INTO attendance (`name`) VALUES ('$query')

标签: javascript php mysql ajax


【解决方案1】:

对于插入查询,结果将返回为布尔值,因此 mysqli_num_rows($res) 不会接受布尔参数。 mysqli_num_rows() 期望参数 1 为 mysqli_result

所以你可以简单地通过下面检查它是否被插入:

if ($res) {
    $respose = array('status'=>'1');//1 for success
    echo json_encode($respose);
    exit;   
} else {
    $respose = array('status'=>'0');//0 for fail
    echo json_encode($respose); 
    exit;   
}
mysqli_close($link);

【讨论】:

    【解决方案2】:

    您应该使用 exit 尝试以下代码:

    ini_set('display_errors', 1);
      ini_set('display_startup_errors', 1);
      error_reporting(E_ALL);
    
      $link = mysqli_connect("localhost","root","");
      mysqli_select_db($link, "schedule");
    
      $query = $_GET['query'];
    
      $res = mysqli_query($link,"INSERT INTO attendance (name) VALUES ('$query')");
    
    
      if (mysqli_num_rows($res) > 0) {
            $respose = array('status'=>'1');//1 for success
            echo json_encode($respose );
            exit;   
      } else {
            $respose = array('status'=>'0');//0 for fail
            echo json_encode($respose ); 
            exit;   
      }
      mysqli_close($link);
      exit;
    

    【讨论】:

    • 试过了但不会有任何改变,添加exit也是上面的其他代码。
    • 添加 exit; 没有任何改变,只是它永远不会到达 mysqli_close()
    • @SummerWinter 这意味着您将 ajax 中的 method: 'GET', 更改为 method: 'POST',
    【解决方案3】:

    mysqli_num_rows() 用于获取从SELECT 查询返回的行数。您需要改为检查受影响的行数。

    您还应该使用准备好的语句,并且我还建议您设置 MySQLi 以引发错误。我也更喜欢面向对象的方法。

    <?php 
    // Configure MySQLi to throw exceptions on failure 
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
    // Init connection
    $link = new mysqli("localhost", "root", "", "schedule");
    $response = [];
    
    // Prepare the statement and execute it
    $stmt = $link->prepare("INSERT INTO attendance (name) VALUES (?)");
    $stmt->bind_param("s", $_GET['query']);
    $stmt->execute();
    
    // Check the number of inserted rows
    if ($stmt->affected_rows) {
        $response['status'] = 1;
    } else {
        $response['status'] = 0;
    }
    
    // Close the statement and connection
    $stmt->close();
    $link->close();
    
    echo json_encode($response);
    

    【讨论】:

      猜你喜欢
      • 2013-01-07
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      相关资源
      最近更新 更多