准备好的 INSERT 语句,以获取insert_id在第二个准备的 INSERT 语句中使用



我试图创建我自己的注册表单,但我在准备语句方面遇到问题。

这个想法是创建一个预准备语句以将信息插入用户表中,然后从中获取生成的内容的insert_id以在另一个插入语句中使用

这是我的注册脚本的一个版本

  <?php
    $returnedId = '';
    include "includes/dbconnect.php";
    $stmt = $db->prepare("INSERT INTO `users`(`Username`, `Email`, `Password`) VALUES (?, ?, ?)");
    $stmt->bind_param('sss', $_POST['username'], $_POST['email'], $_POST['password']);
    $stmt->execute();
    $returnedId = $stmt->insert_id;
    $stmt->close();
    echo $returnedId;
    $allergystmt = $db->prepare("INSERT INTO 'user_allergy' ('user_id', 'allergy_id') VALUES (?, ?)");
    $allergystmt->bind_param('ss', $returnedId, $_POST['check_list']);
    $allergystmt->execute();
    $allergystmt->close();
    header('Location: index.php');
?>

第一个预准备语句正确运行并将信息插入表中,然后成功回显$returnId变量。 脚本中的下一个是我的第二个预准备语句,当它尝试运行 im 时收到错误,指出:

致命错误:在第 17 行的 D:\filepath\register.php 中的非对象上调用成员函数 bind_param()

似乎我的变量没有被带入第二个准备好的语句中。

您的第二个查询存在语法错误,无法prepare 。由于您没有像这样的数据库故障的错误处理,因此您后面的代码只会出错:

$allergystmt = $db->prepare("INSERT INTO 'user_allergy' ('user_id', 'allergy_id') VALUES (?, ?)");
                                         ^---         ^--^---    ^-- etc...

不能对表名和字段名使用引号''表示字符串。这些字段/表名称都不是保留字,因此根本不需要引用它们:

$allergystmt = $db->prepare("INSERT INTO user_allergy (user_id, allergy_id) VALUES (?, ?)");
if (!$allergystmt) { die($dbh->errorInfo()); }

请注意添加 errorInfo() 输出。永远不要假设数据库操作成功。总是假设失败,把成功当作一个惊喜。

相关内容

  • 没有找到相关文章

最新更新