PHP 准备更新语句失败

PHP prepared Update statement fail

我刚开始使用 mysqli 准备好的语句。当我 运行 遇到准备好的 UPDATE 语句的问题时,我仍在努力掌握它。

搜索SO后,我找到了this question

但没有得到答复;这个问题与我的问题非常相似:

<?php

  $pin = '12345' // spaceballs reference
  $email = 'somebody@email.com';
  $update = "UPDATE users SET sec_pin = ? WHERE email = ?;";

  $stmt = $dbc->prepare($update);

  $stmt->bing_param("is", $rand, $dbuseremail);
  $stmt->execute();

?>

我正在返回 500 内部错误。我该如何解决这个问题?

将 bind_param() 拼错为 bing_param()。

也不必担心在您的 bind_param 参数中使用 i 表示整数,只需在您传递的所有变量上使用 s 表示字符串即可;防止不必要的错误并以相同的方式工作,而不必担心您传递的是哪个变量。

还要清理您的代码并修复一些可疑的变量名错误。

<?php

$pin = '12345'; // spaceballs reference
$email = 'somebody@email.com';
$update = "
    UPDATE 
        users 
    SET 
        sec_pin = ? 
    WHERE 
        email = ?";

$stmt = $dbc->prepare($update);

$stmt->bind_param("ss", $pin, $email);
$stmt->execute();

?> //If all of your PHP file is only PHP, then leave this closing tag off.

您可以在 php documentation for mysqli_stmt::bind_param 中找到准备好的语句的一些很好的示例。

现在你代码示例的具体原因:

  1. 您在第 3 行缺少一个分号 ($pin = '12345';)。
  2. 正如您在问题评论中提到的,您拼错了 $stmt->bind_param(...) 函数。
  3. 您在 $stmt->bind_param(...) 函数中使用的变量与您之前在代码中定义的变量不同。变量 $rand 应替换为 $pin,$dbuseremail 应替换为 $email.

一个工作样本是:

<?php

    $dbc = new mysqli('127.0.0.1', 'db_user', 'db_password', 'db_name');

    $pin = '12345'; // spaceballs reference
    $email = 'somebody@email.com';
    $update = "UPDATE users SET sec_pin = ? WHERE email = ?;";

    $stmt = $dbc->prepare($update);

    $stmt->bind_param("is", $pin, $email);
    $stmt->execute();

?>

调试中 PHP

您可能会发现这些资源在尝试调试您的 php 代码时很有帮助: