我正在尝试提交AJAX请求以更新MySQL数据库中的行。每当我尝试通过AJAX提交请求时,该行就不会更新,但是只要我直接在数据库中测试查询和参数值,该行就会被更新。

标记和AJAX如下所示:



$('body').on('change', '.cb_exempt', function() {
  var checked = this.checked;
  var business_id = $(this).attr('data-id');
  var jqxhr = $.post("php/update_exempt.php", {
      exempt: checked,
      business_id: business_id
    })
    .done(function(data) {
      alert("The business successfully updated");
    })
    .fail(function(jqXHR, textStatus, errorThrown) {
      alert(errorThrown);
    });
});

<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script>
<table id="table_businesses" role="grid" aria-describedby="table_businesses_info">
  <thead>
    <tr role="row">
      <th aria-controls="table_businesses">Name</th>
      <th aria-controls="table_businesses">Active</th>
      <th aria-controls="table_businesses">Exempt from Billing</th>
      <th aria-controls="table_businesses">Billing History</th>
    </tr>
  </thead>
  <tbody>
    <tr role="row" class="odd">
      <td>[removed]</td>
      <td><input class="mx-auto cb_active" checked="checked" data-id="1" type="checkbox"></td>
      <td><input class="mx-auto cb_exempt" data-id="1" type="checkbox"></td>
      <td><a href="business.php?business_id=1">View Billing History</a></td>
    </tr>
  </tbody>
</table>





这就是我的PHP的样子:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' || empty($_POST['exempt']) || empty($_POST['business_id'])) {
  // Get the database object from the configuration file
  $db;
  try {
    $db = include('config_consumer_database.php');
  } catch(PDOException $ex) {
    throw new Exception('Database exception.');
  }

  // Update the business' exempt status
  $stmt = $db->prepare('UPDATE IGNORE `business` SET `is_exempt` = :exempt WHERE `business_id` = :business_id;');

  // Execute the query passing the new exempt value and the business_id
  $stmt->execute(array(
    ':exempt' => $_POST['exempt'],
    ':business_id' => $_POST['business_id']
  ));
} else {
  throw new Exception('The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated.');
}
?>


正如我所提到的,每当我尝试使用AJAX请求时,它都将不起作用,但是我已经回显了查询字符串以及$_POST,以便可以将输出直接复制/粘贴到我的MySQL数据库中,以确认查询将运行,并且可以。

更新

我确实注意到我的PHP代码有一个问题,因为我在条件语句中使用的是OR语句而不是AND语句,因此我对此进行了更改。这没有解决我的问题。

我还建议使用issetstrlen($_POST['...']) > 0而不是empty。我都尝试过,都没有解决我的问题。

我还尝试使用常规参数代替命名参数,并将$ _POST直接传递给execute,如下所示:

// Update the business' exempt status
$stmt = $db->prepare('UPDATE IGNORE `business` SET `is_exempt` = ? WHERE `business_id` = ?;');

// Execute the query passing the new exempt value and the business_id
$stmt->execute(array_values($_POST));


这也没有解决我的问题。

每当我检查JavaScript控制台日志时,提交AJAX请求后都不会显示任何内容。每当我检查error.txt日志(xampp> apache>日志> error.txt)时,提交AJAX请求后都不会显示任何内容。

$.POST请求中发送的参数与我期望的一样。

最佳答案

您是否检查mysql查询日志以确保正在执行什么查询。

您可以通过查询检查sql日志文件:

show variables like '%log%';


您可以通过执行以下命令来启用sql日志:

set global general_log=1;


可以通过以下方式设置日志文件:

set global general_log_file='/var/log/mysql/mysql.log';

请检查一次SQL日志。

07-28 03:01
查看更多