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 中找到准备好的语句的一些很好的示例。
现在你代码示例的具体原因:
- 您在第 3 行缺少一个分号 ($pin = '12345';)。
- 正如您在问题评论中提到的,您拼错了 $stmt->bind_param(...) 函数。
- 您在 $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 代码时很有帮助:
- How to get useful error messages in PHP?
- PHP var_dump
我刚开始使用 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 中找到准备好的语句的一些很好的示例。
现在你代码示例的具体原因:
- 您在第 3 行缺少一个分号 ($pin = '12345';)。
- 正如您在问题评论中提到的,您拼错了 $stmt->bind_param(...) 函数。
- 您在 $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 代码时很有帮助:
- How to get useful error messages in PHP?
- PHP var_dump