【问题标题】:Update query from PHP does not work来自 PHP 的更新查询不起作用
【发布时间】:2017-11-12 12:36:12
【问题描述】:

我从 PHP 代码运行此更新查询:

$update_begin_insurance = "UPDATE `vehicles`
                           SET `begin_insurance_date` = '$begin_insurance'
                           WHERE `plate` = '$plate'";

$conn->query($update_begin_insurance);

$conn 是一个PDO 对象。

问题是$conn抛出任何异常,但是我数据库中的vehicles表没有更新。所以,我尝试直接通过phpmyadmin运行这个查询,并且运行正常,所以我认为这是一个PHP问题,但我无法弄清楚问题出在哪里。 我的begin_insurance_date 列的类型是DATE,而$begin_insurance 是一个格式正确的字符串(YYYY-MM-DD,我已经用2017-06-10 尝试过这段代码)。

我正在使用 MySQL DBMS

这是$update_begin_insuranceecho

UPDATE `vehicles`
SET `begin_insurance_date` = '2017-06-10'
WHERE `plate` = 'ccccc'

更新

这是我页面的完整 PHP 代码:

<?php
    require_once "connect_db.php";

    $plate = $_POST["plate"];
    $begin_insurance = $_POST["begin_insurance"];
    $end_insurance = $_POST["end_insurance"];
    $fuel_economy = $_POST["fuel_economy"];
    $fuel_type = $_POST["fuel_type"];
    $response = array();

    try
    {
        $conn->beginTransaction();

        if ($begin_insurance != "")
        {
            $update_begin_insurance = "UPDATE `vehicles`
                                       SET `begin_insurance_date` = '$begin_insurance'
                                       WHERE `plate` = '$plate'";

            $conn->query($update_begin_insurance);
        }

        if ($end_insurance != "")
        {
            $update_end_insurance = "UPDATE `vehicles`
                                     SET `end_insurance_date` = '$end_insurance'
                                     WHERE `plate` = '$plate'";
            $conn->query($update_end_insurance);
        }

        if ($fuel_economy != "")
        {
            $update_fuel_economy = "UPDATE `vehicles`
                                    SET `fuel_economy` = $fuel_economy
                                    WHERE `plate` = '$plate'";
            $conn->query($update_fuel_economy);
        }

        if ($fuel_type != "")
        {
            $update_fuel_type = "UPDATE `vehicles`
                                 SET `id_fuel` = $fuel_type
                                 WHERE `plate` = '$plate'";
            $conn->query($update_fuel_type);
        }

        $response["post"] = $_POST;
        $response["error_code"] = "0";
        $response["error_message"] = "none";
        $response["driver_error_code"] = "0";
    }
    catch (PDOException $e)
    {
        if ($conn->inTransaction())
        {
            $conn->rollBack();
        }

        $response["post"] = $_POST;
        $response["error_code"] = $e->getCode();
        $response["error_message"] = $e->getMessage();
        $response["driver_error_code"] = $e->errorInfo[1];
    }

    echo json_encode($response);
?>

正如我之前所说,我没有遇到任何异常(如您所见,我还打印了 $_POST 数组以检查参数是否被正确接收,是的,它们是)。 这是echo json_encode($response) 打印的内容:

{ "post": { "plate":"ccccc", "begin_insurance":"2017-06-10" }, "error_code":"0", "error_message":"none", "driver_error_code":"0" }

我确信连接工作正常,因为我有其他 PHP 文件执行一些 INSERT 查询,并且它们工作正常。

【问题讨论】:

  • 您的代码产生的最终查询是什么?您是否尝试过使用准备好的语句?
  • @DainisAbols 我已经编辑了我的问题并打印了我的查询。是的,我已经尝试过准备好的语句,但它仍然不起作用
  • 连接是否有效? $conn-&gt;query('select now()');
  • @chris85 是的,它有效
  • 更新后的查询(正是你回显的那个)在 phpmyadmin 中有效吗?抛出的异常是什么?它应该向您显示它是查询错误还是数据库连接或其他问题。您是否连接到您在 phpmyadmin 中使用的同一数据库?

标签: php mysql pdo


【解决方案1】:

我已经解决了这个问题,我错过了$conn-&gt;commit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多