【问题标题】:PDO return success but no data is updated on databasePDO 返回成功,但数据库上没有数据更新
【发布时间】:2020-07-20 10:55:38
【问题描述】:

当我尝试使用PDO 函数更新一行时,它返回成功,当我检查数据库时没有更新数据

所以我关注了这个问题PDOStatement::execute() returns true but the data is not updated,它已经有了答案,但在这里没有用,这就是我所做的

下面是我试过的代码

<?php
$Fuid = '105199239598939142575';
sendOT($Fuid);
echo '<br>Below is var_dump() Rsult<br>';
check($Fuid);

function sendOT($Fuid) {
    try {
        $phone = '6381211774';
        $otp = '1234';
        $conn = new PDO("mysql:host=" . DBHOST . ";port=3306;dbname=" . DBNAME, DBUSER, DBPASS);
        $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $conn->exec("SET CHARACTER SET utf8");
        $stmt2 = $conn->prepare("UPDATE members SET verification_code=:veri_code AND phone=:phone WHERE Fuid=:Fuid");
        $stmt2->bindParam(':Fuid', $Fuid, PDO::PARAM_STR);
        $stmt2->bindParam(':veri_code', $otp, PDO::PARAM_STR);
        $stmt2->bindParam(':phone', $phone, PDO::PARAM_STR);
        $stmt2->execute();
        echo 'Updated succeeded';
    } catch (Exception $e) {
        echo $e;
    }
}

function check($Fuid) {
    $conn = new PDO("mysql:host=" . DBHOST . ";port=3306;dbname=" . DBNAME, DBUSER, DBPASS);
    $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $conn->exec("SET CHARACTER SET utf8");
    $stmt2 = $conn->prepare("SELECT * FROM members WHERE Fuid=:Fuid");
    $stmt2->bindParam(':Fuid', $Fuid, PDO::PARAM_STR);
    $stmt2->execute();
    $unr = $stmt2->fetch(PDO::FETCH_ASSOC);
    var_dump($unr);
}
?>

输出

根据这个问题的答案PDOStatement::execute() returns true but the data is not updated 可能没有WHERE 的行所以我尝试使用相同的WHERESELECT 查询并显示结果。

为什么我的 UPDATE 查询没有在数据库中更新?

【问题讨论】:

  • 您是否禁用了autocommit
  • @Barmar autocommit 我应该在哪里检查?
  • SELECT @@autocommit;
  • @Barmar 喜欢这样吗? stackoverflow.com/a/45235685/3836908
  • 只需将其输入到交互式查询中,例如 phpMyAdmin、MySQL Workbench 或 mysql 命令行实用程序。

标签: php pdo


【解决方案1】:

经过多次尝试,我设法使用此查询进行了更新。

$stmt2 = $conn->prepare("UPDATE members SET verification_code=:veri_code, phone=:phone WHERE Fuid=:Fuid");

在更新查询中使用 como , 从查询中删除 AND 后它起作用了。

【讨论】:

    猜你喜欢
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    相关资源
    最近更新 更多