【问题标题】:PHP MYSQLI Prepared statements struggling with updatePHP MYSQLI Prepared 语句难以更新
【发布时间】: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 -&gt; error; 得到任何东西??
  • 如果您删除$stmt -&gt; affected_rows === 1,您会收到您期望的消息吗?
  • 如果sign_on_signature 未更改,即它已经设置为bob,那么受影响的行数将为零。这可能是你的问题吗
  • 只需删除 $stmt -> affected_rows === 1 并尝试

标签: php mysqli prepared-statement


【解决方案1】:

谢谢大家,这是两件事的结合:

$stmt -&gt; affected_rows === 1

由于它影响了 2 行,它总是会返回 false,因为它本来应该是 0 或 2,因此我将其更改为:

$stmt -&gt; affected_rows &gt; 0

或者如前所述,我只是在提交表单时不需要它,除非我需要在提交时告诉用户他们没有更改任何内容?

另一个正如@RiggsFolly 所说,如果没有任何改变,结果将为 0,我仍然希望它返回行,这是我的人为错误,我没有更改测试之间的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-11
    • 2012-05-24
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    相关资源
    最近更新 更多