php - 为什么 MySQL INSERT 语句无法正常运行

标签 php mysql database insert

一直运行良好的 php/mySQL 预订功能突然停止将预订条目插入数据库,代码没有任何更改,数据库连接也正常工作。

我运行正在另一个网站上运行的页面的并行版本;两者之间的唯一区别是损坏的版本在 php 5.6 上运行,而正常版本仍在 5.4 上运行。

添加错误日志不会带来任何结果,即使表没有更新,并且我看不到 php 5.4 和 5.6 之间任何已弃用的语句。

有人能发现我遗漏的问题吗?

 //If the confirm button has been hit:
if (isset($_POST['submit'])) {

//Create the foreach loop
  foreach ($_POST['class_id'] as $classes) {
  $class_id = (int)$classes;
  //UPDATE the bookings table **THIS PART IS NOT WORKING**:
  $query = "INSERT INTO bookings (user_id, booking_name, class_id, time_stamp) VALUES ('$user_id', '$username', '$class_id', NOW())";
  mysqli_query($dbc, $query);

}
foreach($_POST['class_id'] as $classes){
  $class_id = (int)$classes;
  //Change the booking numbers **THIS WORKS FINE**:
  $increase = "UPDATE classes SET online_bookings = (online_bookings + 1), total_bookings = (total_bookings + 1), free_spaces = (free_spaces - 1) WHERE class_id = $class_id";
  mysqli_query($dbc, $increase);
  }
   mysqli_close($dbc);

..以及提供 $_POST 数据的表:

echo'<div class="container">';
echo'<div class="span8 offset1 well">';
echo'<p class="lead text-info">Do you want to reserve space at these classes?</p>';



//table header
echo '<table id="dancers" class="table table-bordered table-hover">';
  echo '<thead><tr><th>Date</th><th>Time</th><th>Venue</th><th>Who\'s going?</th></tr></thead>';
//create the form
echo '<form id="makebkg" method="post" action="' . $_SERVER['PHP_SELF'] . '">';


//Get the class IDs from the GET to use in the POST

    foreach ($_GET['sesh'] as $class_id) {

    $sql = "SELECT class_id, DATE_FORMAT(date, '%a, %d %b') AS new_date, DATE_FORMAT(time, '%H:%i') AS new_time, venue FROM classes WHERE class_id = '$class_id'";
    $data = mysqli_query($dbc, $sql);


//get table data
    while ($row = mysqli_fetch_array($data)) {
    $date = $row["new_date"];
    $time = $row["new_time"];
    $venue = $row["venue"];
    $class_id = $row["class_id"];
  }


//Show a table of the selected classes


      echo '<tr><td>' . $date . '</td>';
      echo '<td>' . $time . '</td>';
      echo '<td>' . $venue . '</td>';
      echo '<td>' . $username . '</td></tr>';
      echo '<input type="hidden" name="date[]" value="' . $date . '" />';
      echo '<input type="hidden" name="time[]" value="' . $time . '" />';
      echo '<input type="hidden" name="venue[]" value="' . $venue. '" />';
      echo '<input type="hidden" name="username[]" value="' . $username . '" />';
      echo '<input type="hidden" name="class_id[]" value="' . $class_id . '" />';



    }
 echo'</table>';



    //Go Back button
    echo '<a class="btn btn-link pull-left" href="classes.php"><i class="icon-arrow-left"></i> Go back</a>';

  // Make booking button - LIVE
      echo'<div id="confirmbtn">';
     echo '<input type="submit" id="confirm" name="submit" class="btn btn-large btn-primary pull-right" value="Confirm">';
      echo '</div>';

最佳答案

好的,我终于解决了这个问题。 事实证明,托管公司已将 MySQL 模式更改为“严格”。

这里的 INSERT 语句将一些表列留空,因此严格模式拒绝整个插入。在插入命令之前更改模式是比更新插入命令更快的解决问题的方法:

  // TURN OFF STRICT MYSQL MODE
  $strict = "SET sql_mode = ''";
  mysqli_query($dbc, $strict);

感谢一位懒惰的编码员的所有建议和宽容。

关于php - 为什么 MySQL INSERT 语句无法正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42613360/

相关文章:

javascript - 提交成功后显示alert或msgbox

php - 文本语料库中的单词匹配非常慢

sql - 在 SQLite 3 中启用查询日志记录

mysql - 当 select 语句中给出格式 'dd-MM-YYYY' 未按预期工作时按日期排序

java - LocalDateTime 删除毫秒

php - __toString 魔术和类型强制

php - 如何对大文件使用 ssh2_scp_recv(内存限制)

java - 重复更新 MySQL 表中的行

php - Javascript php 变量未通过 http_build_query 传递

mysql - Python 3 MySQL 使用问号占位符