【问题标题】:ajax data response always 0 in php mysqlphp mysql中的ajax数据响应始终为0
【发布时间】:2019-12-12 19:27:40
【问题描述】:

我想通过 ajax php 将一些数据从 mysql 加载到 div。自增的id字段总是为零。

我尝试过使用 get、post 等,但都没有用

<script>
  $(document).ready(function(){

   $(document).on('click', '#getUser', function(e){

    e.preventDefault();

    var uid = $(this).data("customer_id");   // it will get id of clicked row

    $('#txtHint').html(''); // leave it blank before ajax call
    $('#mySidenav').show();      // load ajax loader

    $.ajax({
      url: 'getCustomerDetails.php',
      type: 'GET',
      data: 'customer_id='+uid,
      dataType: 'html'
    })
    .done(function(data){
      console.log(data);  
      $('#txtHint').html('');    
      $('#txtHint').html(data); // load response 
      $('#modal-loader').hide();      // hide ajax loader 
    })
    .fail(function(){
      $('#txtHint').html('<i class="glyphicon glyphicon-info-sign"></i> Something went wrong, Please try again...');
      $('#modal-loader').hide();
    });

  });

 });

</script>


        <?php

include_once('../../config/dbconfig.php');


    if (isset($_REQUEST['customer_id'])) {

        $id = intval($_REQUEST['customer_id']);
        $query = "SELECT * FROM customers WHERE customer_id=:id";
        $stmt = $pdo->prepare( $query );
        $stmt->execute(array(':id'=>$id));
        $row=$stmt->setFetchMode(PDO::FETCH_ASSOC);


        ?>
        <div class="row">
            <div class="col-md-1">
            <div class="col-md-4" >
                <?php echo $row['first_name'];?>
            </div>
            <div class="col-md-6">

            </div>
        </div>
    </div>


    <?php echo $id;?><br/>


<?php
}

?>

结果不是回显 firs_name,因为 $id 始终为 0。 我想获得个人 $id(auto_increment) 完成后应该显示用户记录

【问题讨论】:

  • 仅供参考:您只设置了fetchMode 并执行了查询,实际上并没有进行获取
  • 使用$row = $stmt-&gt;fetch_assoc(); 而不是$row=$stmt-&gt;setFetchMode(PDO::FETCH_ASSOC);
  • fetch_assoc() 给出错误调用未定义方法 PDOStatement::fetch_assoc() - @Dejvid

标签: php mysql ajax


【解决方案1】:

从调试数据库的实际结果开始。

if (isset($_REQUEST['customer_id'])) {

        $id = intval($_REQUEST['customer_id']);
        $query = "SELECT * FROM customers WHERE customer_id=:id";
        $stmt = $pdo->prepare( $query );
        $stmt->execute(array(':id'=>$id));
        $row=$stmt->setFetchMode(PDO::FETCH_ASSOC);

你不是在检查错误。

两个建议:

1) 您正在使用&lt;?php echo $row['first_name'];?&gt;。如果您检查了结果集,您会发现其中有什么问题。只需使用 print_r() 等在(错误命名的)$row 变量中输出结果。我相信你会看到哪里出了问题。

2) 我强烈建议不要使用 $_REQUEST。它很懒惰且容易出错。你知道“customer_id”是从哪里来的吗?会议?曲奇饼?邮政?还是得到?如果您通过 GET 传递信息 => 使用 GET

【讨论】:

  • 同意一切,只是一个澄清。为什么$row 变量名错误?是不是因为太模糊了? (我不是OP)
  • @Dejvid 我说是因为他没有获取一行,只是设置了 fetchmode。你的评论清楚地告诉了他。赞成。
【解决方案2】:

我假设customer_id 是您数据库中的唯一键,并且您的数据库中的每个 id 只返回一行。那么,如何正确使用 PDO 语句:

$sql = "SELECT * FROM customers WHERE customer_id=:id";
//Prepare your SELECT statement.
$statement = $pdo->prepare($sql);
//The Primary Key of the row that we want to select.
$id = intval($_REQUEST['customer_id']);
//I highly recomment not to use $_REQUEST, use $_GET or even better $_POST

//Bind our value to the paramater :id.
$statement->bindValue(':id', $id);

//Execute our SELECT statement.
$statement->execute();

//Fetch the row.
$row = $statement->fetch(PDO::FETCH_ASSOC);

//If $row is FALSE, then no row was returned.
if($row === false){
    echo $id . ' not found!';
} else{
    echo 'Found: ' . $row['first_name'];
}

编辑 另外,像这样更改您的 ajax 请求:

$.ajax({
  url: 'getCustomerDetails.php',
  type: 'POST',
  data: {customer_id:uid}
})

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2016-03-27
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多