【问题标题】:Mysqli INSERT not showing in database and no errorsMysqli INSERT 未显示在数据库中并且没有错误
【发布时间】:2013-12-18 13:53:40
【问题描述】:

我正在尝试将此信息插入到我的数据库中,我为 SELECT 查询设置了几乎相同的代码,并且它们可以正常工作。我尝试的任何 INSERT 查询都不起作用。

这个函数返回 true,我已经回应了这个函数创建的查询,并使用 PHPMyAdmin 运行 SQL 查询,它将显示在数据库中,但是当通过这个 php 代码执行它时,INSERT 永远不会出现在数据库。

编辑:我注意到设置为自动递增的列之一 (orderID) 每次运行此函数时都会增加,但无论出于何种原因,查询实际上并未放入表中。

This Image 显示orderID 缺少 29 个,我通过执行 2 个 PHPMyAdmin INSERT 查询获得了这些表结果,然后一个使用函数,另一个使用 PHPMyAdmin。有什么方法可以让我的函数删除插入?

function add_to_cart($user_id, $product_id, $quantity) {
global $mysqli;
    if($result = $mysqli->query("INSERT INTO orders (userID, productID, quantity, orderDate) VALUES ('$user_id', '$product_id', '$quantity', NOW())")){
         return $result;
    }

return false;
}

连接到数据库的用户拥有数据库的完全权限,所以这不应该是问题

【问题讨论】:

  • return false 更改为die($mysqli->error()) 看看会弹出什么。你没有说明你如何处理返回值,所以我假设你没有正确检查失败。
  • global $mysqli; 你真的需要那个吗?
  • 如果您的userID 列设置为AUTO_INCREMENT,它可能会不起作用。如果是,请删除 userID,'$user_id', 并检查 orderDate 列的设置。可能有很多东西。
  • 疯狂猜测:你在提交交易吗? (影响 MyISAM 表的 DML 指令是自动提交的,但影响 InnoDB 表的指令可以稍后提交)
  • 我们不应该在这里“拍照”,编程不应该是“让我们尝试一些我知道不会改变任何东西,也许它会起作用”。 ...但我也有罪,我承认:D

标签: php mysql sql insert mysqli


【解决方案1】:

我能够通过在$mysqli->query() 之后添加$mysqli->commit(); 来解决此问题

我需要这样做,因为我更改了默认选项并拥有"SET AUTOCOMMIT = 0"

取出它让我可以删除$mysqli->commit()

function add_to_cart($user_id, $product_id, $quantity) {
    global $mysqli;
    if($result = $mysqli->query("INSERT INTO orders (userID, productID, quantity, orderDate) VALUES ($user_id, $product_id, $quantity, NOW())")){
        if (!$mysqli->commit()) {
            print("Transaction commit failed\n");
        }
        return $result;
    }
    die($mysqli->error());
}

【讨论】:

  • 你解决的不是问题而是后果。我强烈建议找到实际启动事务的运算符或设置。很可能您只是将它与其他代码一起复制粘贴到某个地方。
  • 我从未开启过自动提交。因此,如果 Barranka 所说的是正确的,我需要提交 INSERT 查询,它与打开的事务没有任何关系。我刚刚检查了我的所有函数,我只有这个查询对数据库进行了更改。
  • 您不必打开自动提交。因为它是默认开启的。你不应该把它关掉。
  • 更仔细地查看了我的 Mysqli 初始化代码。结果我确实关闭了自动提交。这就是我从网上复制那段代码所得到的。
【解决方案2】:

从其他类似的众多问题来看,您只是在错误的数据库中寻找结果。

说到函数本身,它是臃肿且不安全的。

您应该使用准备好的语句。

function add_to_cart($user_id, $product_id, $quantity) {
    global $pdo;
    $sql = "INSERT INTO orders (userID, productID, quantity, orderDate) VALUES (?, ?, ?, NOW())";
    $pdo->prepare($sql)->execute(func_get_args());
}

返回任何东西是没有意义的,因为如果发生错误,就会抛出异常。即使有,像IF result == true THEN return true ELSE return false 这样的重言式仍然没有用。您可以简单地返回结果本身。

【讨论】:

  • 嗯,我很肯定我正在查看正确的表格以获得结果。我正在 PHPMyAdmin 中检查它们,我通过 PHPMyAdmin 输入的查询显示在 orders 我已经更新了我的原始帖子。查询不会进入数据库,但每次我尝试运行查询时,其中一列都会自动递增。
  • 好吧,调试你的代码。社区几乎无能为力。这可能是一笔交易或其他什么。但只有你能发现
  • 我在这里发帖的全部原因是因为我已经调试了我的代码并在其他任何地方进行了搜索。我没有看到我的代码有任何问题,也没有看到其他人遇到我的问题。 i.imgur.com/YYIgzk6.png 缺少 29 个的 orderID,我通过执行 2 个 PHPMyAdmin INSERT 查询获得了这些表结果,然后是函数一个,另一个是 PHPMyAdmin。有什么办法可以让我的函数删除插入?
  • 看。您的代码有总是出现故障的方法。不幸的是,原因有无限 - 让所有的猜测都失败了。找到问题的唯一方法是调试您的代码。这只是你作为程序员的职责。
猜你喜欢
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 2015-12-17
  • 1970-01-01
相关资源
最近更新 更多