【发布时间】:2020-03-02 01:20:04
【问题描述】:
我正在使用以下代码运行 PHP/MySQL 插入查询。我没有收到任何错误,并且查询成功。但是数据库没有更新。我已经在 phpAdmin 中测试了 SQL,它确实有效。我正在使用绑定将我的变量添加到 SQL 查询中。我唯一能想到的是绑定不起作用。有什么方法可以获取错误日志。我似乎无法在 XAMPP 或在线上找到它们,除非我不擅长搜索它们。或者也许有人可以在下面的代码中看到错误。
<?php
$conn = mysqli_connect("localhost","root","M0nkwork", "blogs");
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
else{
$msg = '';
$msgClass = '';
if(filter_has_var(INPUT_POST, 'submit')){
//Send PHP to database
$SQL = "INSERT INTO Blogs(UserID, Title, Author, Blog, Date) VALUES (?,?,?,?,?)";
$stmt = $conn->prepare($SQL);
$stmt->bind_param("issss", $UserID, $Title, $Author, $Blog, $Date);
$Author = $_POST['Author'];
$Title = $_POST['Title'];
$BlogEntry = $_POST['BlogEntry'];
$Date = $date = date('m/d/Y h:i:s a', time());
$UserID = 1;
if(!empty($Author) && !empty($Title) && !empty($BlogEntry)){
$stmt->execute();
$stmt->close();
$msg = 'Success';
$msgClass = 'alert-success';
}else{
$msg = 'Please Fill in all fields';
$msgClass = 'alert-danger';
}
}
}
?>
【问题讨论】:
-
“我没有收到任何错误。” 那是因为您没有检查任何错误。
prepare()、bind_param()、execute()——它们都可能失败并返回FALSE。您需要检查这种可能性。 -
如果您的日期字段是
date而不是varchar,那么正确的格式是Y-m-d H:i:s。其他任何事情都可能导致问题。 -
try/catch 不会捕获 mysqli 错误。您需要使用 mysqli errors 明确检查它们
-
Echoing @AlexHowansky ...要么检查 mysqli 函数调用的返回,要么启用 PHP 异常报告 ...
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);php.net/manual/en/mysqli-driver.report-mode.php 否则,mysqli::execute 将返回 FALSE,如果发生错误。我们需要测试函数的返回,以确定是否发生错误。 (你到底是怎么确定语句执行没有插入一行的?你确定你查询的是同一个表,同一个数据库吗?)