【发布时间】: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 的行所以我尝试使用相同的WHERE 和SELECT 查询并显示结果。
为什么我的 UPDATE 查询没有在数据库中更新?
【问题讨论】:
-
您是否禁用了
autocommit? -
@Barmar
autocommit我应该在哪里检查? -
SELECT @@autocommit; -
@Barmar 喜欢这样吗? stackoverflow.com/a/45235685/3836908
-
只需将其输入到交互式查询中,例如 phpMyAdmin、MySQL Workbench 或
mysql命令行实用程序。