【问题标题】:Insert Into query and expecting more than one result? [closed]插入查询并期望多个结果? [关闭]
【发布时间】:2012-10-01 23:25:02
【问题描述】:

我有一个 mysqli 函数将一行插入到表中。我正在恢复错误

Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of 
fields in prepared statement

这对我来说很奇怪,因为我认为 insert nto 返回真或假。这是使用 sql 语句的函数。

function add_project_deadline ($mysqli, $project_id, $deadline) {


if ($stmt = $mysqli->prepare("INSERT INTO `project_deadline` (project_id, deadline) 
    VALUES (?, ?)")){
    $stmt->bind_param('is', $project_id, $deadline);
    $stmt->execute();
    $stmt->bind_result($return);
    $stmt->close();
    return $return;
} else {return false;}  

}

我的问题是为什么我会收到此 bind_result 错误以及如何修复它。

【问题讨论】:

  • 首先阅读错误/警告消息消息:-1 以帮助鼓励这一过程。现在,为什么会这样说?哪些变化可能会“修复”它?
  • 我确实阅读了错误消息。我一直认为,如果它返回true,那么就会有一个可以绑定到变量的结果。除非你不能,如果是这样的话,我怎么知道查询通过了?如果我错了,那么我是否假设插入查询会返回多个结果?我真的不知道。我只是想要启发和解释什么 insert into 返回真或假,以及当使用 mysqli 进行查询时如何返回该值。
  • 而您的插入是否有效,您可以在execute查看返回值

标签: php sql insert mysqli


【解决方案1】:

由于您正在执行没有任何结果的INSERT 查询,因此您不需要或使用bind_result 来获取数据。 bind_result 用于绑定到 SELECT 语句中使用的列。

mysqli_stmt::execute() 在成功时返回 true,在失败时返回 false,因此只需将其值分配给您的 $return 变量即可。

如果 execute() 返回 false,则 INSERT 语句由于某种原因失败。如果它返回true,则INSERT 成功,您可以通过查看语句对象的mysqli_stmt::$affected_rows 属性来确定插入的行数。

这就是您收到该错误的原因,希望对您有所帮助。您可以在 mysqli_stmt::execute() 的手册页上找到大部分此类信息。

【讨论】:

    猜你喜欢
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2012-08-14
    相关资源
    最近更新 更多