javascript - 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);
})
}
}
解决方案
这是解决方案:在我的表中,我没有为某些字段设置默认值。即使这些字段(没有默认值)未包含在我的 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,他为我指明了正确的方向。谢啦。
推荐阅读
- react-admin - React Admin:如何将状态传递给转换
- javascript - Angular JS中带有自定义文本的选择框中的预设选项
- python - 如何调整numpy数组的大小?
- kubernetes - Kubernetes kubectl 补丁 pod 与删除/创建 pod
- swift - 快速比较三个枚举
- python - Python pivot_table - 添加差异列
- c - 如何使用 write() 或 fwrite() 将数据写入终端(stdout)?
- powershell - 将从文件中读取的变量传递给调用命令
- r - 尽管在常规 R 脚本中工作,但命令无法在 RMarkdown 中运行
- api - 无法使用 Az DevOps Pipelines API 6.0-preview.1 创建新的管道