PHP准备的Update语句失败

时间:2018-05-11 17:45:42

标签: php mysqli prepared-statement

我刚开始使用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内部错误。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以在php documentation for mysqli_stmt::bind_param中找到准备好的陈述的一些很好的例子。

现在您的代码示例的具体原因

  1. 第3行缺少分号($ pin ='12345'; )。
  2. 正如您在问题评论中已经提到的那样,您拼错了$ stmt-&gt; bind_param(...)函数。
  3. 您在$ stmt-&gt; bind_param(...)函数中使用的是不同的变量,然后是您之前在代码中定义的变量。变量$ rand应该用$ pin替换,$ dbuseremail用$ email替换。
  4. 工作样本

    <?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代码时,您可能会发现这些资源很有用:

答案 1 :(得分:0)

将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.