首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >准备好的INSERT语句以使insert_id在第二个准备好的INSERT语句中使用

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

Stack Overflow用户
提问于 2014-02-24 15:59:28
回答 1查看 401关注 0票数 0

我试图创建我自己的登记表,但我对准备好的陈述有问题。

其思想是创建一个准备好的语句,将信息插入用户表中,然后从该语句中获取生成的内容中的insert_id,以便在另一个insert语句中使用。

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

代码语言:javascript
复制
  <?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行的非对象上调用成员函数bind_param()

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-24 16:06:50

第二个查询有语法错误,prepare失败。由于您对这样的数据库故障没有错误处理,所以后面的代码只会犯以下错误:

代码语言:javascript
复制
$allergystmt = $db->prepare("INSERT INTO 'user_allergy' ('user_id', 'allergy_id') VALUES (?, ?)");
                                         ^---         ^--^---    ^-- etc...

不能在表名和字段名上使用'引号。'表示字符串。这些字段名/表名都不是保留词,因此根本没有必要引用它们:

代码语言:javascript
复制
$allergystmt = $db->prepare("INSERT INTO user_allergy (user_id, allergy_id) VALUES (?, ?)");
if (!$allergystmt) { die($dbh->errorInfo()); }

注意添加了errorInfo()输出。永远不要假设DB操作是成功的。总是假设失败,并把成功当作一个惊喜。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21992632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档