首页 > 解决方案 > SQL INSERT 和 UPDATE 命令在网站服务器上不起作用,尽管它们在 XAMPP 上运行良好。包括页面转换。PHP网站

问题描述

在我的本地机器上运行 XAMMP(工作正常)(服务器 TCP/IP,10.4.17-MariaDB,DB 客户端版本:libmysql - mysqlnd 8.0.0,PHP 版本:8.0.0)

在我的网站上(工作但不执行 INSERT 命令)(通过 UNIX 套接字的本地主机,10.3.31-MariaDB,数据库客户端版本:libmysql - 5.6.43,PHP 版本:7.3.30)

error_log 不报告任何错误!(它是空的!)

这是代码:DB.php:

$DSN='mysql:host = localhost; dbname=myDB; useUnicode=true; characterEncoding=UTF-8; useFastDateParsing=false';

$ConnectingDB = new PDO($DSN,'myUsername','myPass',

    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

在页面上(action.php):

require_once("includes/DB.php");

    if(isset($_POST["Submit"])){
      $username = $_POST['username'];
      $password = $_POST['password'];
      ...
      mail($to,$email_subject,$email_body,$headers); //I skipped a small part, but I have all arguments set, this part is working fine on both servers

        global $ConnectingDB;
        $sql = "INSERT INTO admins(username,password)";
        $sql .= "VALUES(:username,:password)";
        $stmt = $ConnectingDB->prepare($sql);
        $stmt->bindValue(':username',$username);
        $stmt->bindValue(':password',$password);
    
        $Execute=$stmt->execute();

        header("Location: login.php");
    }

这段代码之前和之后的所有其他命令都在网站上很好地执行。只有这个 INSERT 命令(以及其他地方的 UPDATE)没有被执行。似乎服务器只是跳过这些线并继续工作而不会报告错误。

我也加入了 javascript 页面转换,所以它可能是一些干扰。这是我的 page-transitions.js:

window.onload = () => {
  const anchors = document.querySelectorAll('a');
  const transition_el = document.querySelector('.transition');

  setTimeout(() => {
    transition_el.classList.remove('is-active');
  }, 500);

  for (let i = 0; i < anchors.length; i++) {
    const anchor = anchors[i];

    anchor.addEventListener('click', e => {
      e.preventDefault();
      let target = e.target.href;

      transition_el.classList.add('is-active');

      setInterval(() => {
        window.location.href = target;
      }, 500);
    })
  }
}

标签: javascriptphpsql

解决方案


这是解决方案:在我的表中,我没有为某些字段设置默认值。即使这些字段(没有默认值)未包含在我的 SQL 命令中,服务器(通过 UNIX 套接字的 Localhost,10.3.31-MariaDB,DB 客户端版本:libmysql - 5.6.43,PHP 版本:7.3.30 ) 忽略该命令并继续执行代码而不报告错误。另一方面,我的 XAMMP(服务器 TCP/IP,10.4.17-MariaDB,DB 客户端版本:libmysql - mysqlnd 8.0.0,PHP 版本:8.0.0)执行此代码没有任何问题。总之,问题出在服务器上。我仍然不确定究竟是什么导致了问题(我相信它是 DB 客户端版本或 MariaDB 版本)但现在我知道如果我使用旧版本的服务器,我应该记住字段默认值。反正,我在 php 中使用 errorInfo() 命令来定位错误。我非常感谢 ADyson,他为我指明了正确的方向。谢啦。


推荐阅读