【问题标题】:MySQL and PHP INSERT is not inserting into Database [duplicate]MySQL和PHP INSERT未插入数据库[重复]
【发布时间】: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,如果发生错误。我们需要测试函数的返回,以确定是否发生错误。 (你到底是怎么确定语句执行没有插入一行的?你确定你查询的是同一个表,同一个数据库吗?)

标签: php mysql insert


【解决方案1】:

感谢大家的回复和 cmets。我发现了错误,我将在此处发布错误,但是我想将此线程标记为已解决,以供其他人发布错误日志。我相信将这些行添加到 php 代码的开头会给我需要的错误。最终证明是脱节。

如果您注意到 $BlogEntry 是我存储博客正文的变量。但是 $Blog 是我在 $SQL 查询中引用的内容。

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

【讨论】:

  • ^^^ THIS ^^^ +10 ... 在我们搞砸“试试这个”和当我们不知道实际问题是什么时,“试试那个”和“也许是别的”非解决方案。 (我不确定为什么有人不赞成这个答案,因为这 is 是正确的答案。因此,从西方最快的枪支中,不乏“试试这个”的猜测,以发送你追逐兔子洞,做出与实际问题无关的更改。)
  • 这基本上是我问的问题。我想知道我能做些什么来显示错误日志,因为我知道这是一个 SQL 错误,但是当我在 2 天前刚刚发现这个问题时,我在网上找到这个解决方案时遇到了问题。谢谢你的呐喊。我也发现这个地方有时非常难以接近,这只是我个人的看法,我希望这个地方不是不可接近的。只是我的两分钱。
  • 我无法解释为什么这四行代码(发布在此答案中)不在 every mysqli_ 在线示例中,更不用说在任何 mysqli_ 在线示例...
  • @DaveK Stack Overflow 可能需要一些时间来适应。尽量不要将简洁或沮丧解释为敌意。你是成千上万犯过这种错误的人中的一员,要处理另一个问题并保持积极态度可能是一个挑战。太多的 PHP 开发人员完全没有为开发工作做好准备,不知道他们的错误日志在哪里,没有正确设置他们的数据库连接等等。这不是你的错,这是 PHP 文档和社区最好的失败-实践。希望这次交流对整体有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 2017-04-29
相关资源
最近更新 更多