【发布时间】:2021-06-06 11:32:12
【问题描述】:
我一直在尝试各种方法,但似乎无法让我的更新声明起作用。
下面是我的代码,我包含了可以正常工作的 select 语句,当我做错事时,错误确实有效,因此它表明语法是正确的,但由于某种原因,它返回 0 行受影响。我认为这会指向我的命令,但无论如何我对调试的了解并不多。
我已经在 phpmyadmin 中尝试过该命令,它似乎工作正常。
如果有人可以帮忙,我已经摸不着头脑了将近一天 :)
工作选择语句:
$user_id = 101;
$stmt = $conn -> prepare('SELECT id, sign_on_signature, user_id FROM a_entry_form WHERE user_id = ?');
if (
$stmt &&
$stmt -> bind_param('s', $user_id) &&
$stmt -> execute() &&
$stmt -> store_result() &&
$stmt -> bind_result($record_id, $signature, $user)
) {
while ($stmt -> fetch()) {
echo "$record_id - $signature: $user <br>";
}
} else {
echo 'Prepared Statement Error';
}
更新语句失败:
$stmt = $conn -> prepare('UPDATE a_entry_form SET sign_on_signature = ? WHERE user_id = ? ');
$name = 'Joe';
$id = 101;
if (
$stmt &&
$stmt -> bind_param('si', $name, $id) &&
$stmt -> execute() &&
$stmt -> affected_rows === 1
) {
echo 'Updated';
} else {
echo 'Not updated';
echo $conn -> error;
}
上面应该执行以下工作正常:
UPDATE a_entry_form SET sign_on_signature = 'bob' WHERE user_id = 101
【问题讨论】:
-
更新失败还是只是您过于复杂如果您从
$conn -> error;得到任何东西?? -
如果您删除
$stmt -> affected_rows === 1,您会收到您期望的消息吗? -
如果
sign_on_signature未更改,即它已经设置为bob,那么受影响的行数将为零。这可能是你的问题吗 -
只需删除 $stmt -> affected_rows === 1 并尝试
标签: php mysqli prepared-statement