没有为 MySQLi 准备好的语句中的参数提供数据

2024-01-28

我一直在重新设计我的网站,从不受保护的 MySQL 查询到 mysqli 准备好的语句,一切都很顺利,直到我得到这个:没有为准备好的语句中的参数提供数据。

if(empty($err)) {
    $pSETQuery  = NULL;
    if(!empty($_POST['password'])) {
        $pSETQuery .= ", password = ?";
    }
    if($session->isSuperuser()) {
        $pSETQuery .= ", usertype = ?";
    }
    if(!($stmt = $database->prepare("UPDATE user SET username = ?, email = ? $pSETQuery WHERE UserId = ?"))) {
        $err[] = "PREPARE FAILED.";
    }
    $stmt->bind_param("s", $_POST['username']);
    $stmt->bind_param("s", $_POST['email']);
    if(!empty($_POST['password'])) {
        $stmt->bind_param("s", $_POST['password']);
    }
    if($session->isSuperuser()) {
        $stmt->bind_param("s", $_POST['usertype']);
    }
    $stmt->bind_param("i", $_POST['userid']);
    if(!$stmt->execute()){
        $err[] = "Execute failed. ERROR: " . $stmt->error;
    }

}

您收到的错误是由以下几行引起的:

$stmt->bind_param("s", $_POST['username']);
$stmt->bind_param("s", $_POST['email']);

你应该只打电话bind_param()一次,您需要提供与 SQL 中占位符相同数量的可变参数。这个功能设计得不好,这也是人们更喜欢PDO的主要原因之一。

为了解决这个问题,你需要动态准备三件事:占位符、类型和要绑定的变量。以下是动态构建此类查询的方法:

if(empty($err)) {
    $pSETQuery  = '';
    $types = 'sss'; // for the three constant placeholders
    $data = [$_POST['username'], $_POST['email']];
    if(!empty($_POST['password'])) {
        $pSETQuery .= ", password = ?";
        $types .= 's'; //concat one more
        $data[] = $_POST['password'];
    }
    if($session->isSuperuser()) {
        $pSETQuery .= ", usertype = ?";
        $types .= 's'; //concat one more
        $data[] = $_POST['usertype'];
    }
    $data[] = $_POST['userid']; // for UserId
    
    $stmt = $database->prepare("UPDATE user SET username = ?, email = ? $pSETQuery WHERE UserId = ?");
    $stmt->bind_param($types, ...$data);
    $stmt->execute();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

没有为 MySQLi 准备好的语句中的参数提供数据 的相关文章

随机推荐

  • Knex.js - 如何使用“where”子句创建唯一索引?

    我正在使用 Knex js 我想使用 WHERE 子句为我的表创建唯一索引 db schema createTable newTable function t t increments t string col1 defaultTo nul
  • 使用 OpenRefine(或 R)解析大型且复杂的 Json 文件的最佳方法

    我知道如何在 Open Fine 中解析 json 单元格 但这对我来说太棘手了 我使用 API 提取了 4730 个 AirBNB 房间的日历 并通过其 ID 进行识别 以下是一个 Json 文件的示例 对于从现在到 2017 年 11
  • 在 Heroku 上登录 Django 未出现

    我在 Heroku 上创建了一个应用程序 并将我的 Django 应用程序推送到它 我使用监控日志heroku logs tail实时查看它们 然后 在我的settings py 我有以下内容 LOGGING version 1 disab
  • 将 cat 的输出通过管道传递给 cURL 以下载文件列表

    我在一个名为的文件中有一个 URL 列表urls txt 每行包含 1 个 URL 我想使用 cURL 一次性下载所有文件 我似乎无法说出正确的一句话 I tried cat urls txt xargs 0 curl O 但这只给了我列表
  • wpf文本框平面边框样式

    需要为基于 wpf 的文本框提供平面边框样式 真的很惊讶地发现没有简单的方法可以像 winforms 文本框 BorderStyle FixedSingle 那样获得此样式 有没有简单的方法可以为 wpf 文本框完成此操作 实现的方法是使用
  • iOS:为什么我们的应用程序有时不显示在通知中心?

    这个问题有3种情况 在开发过程中 我可以重新启动iPhone并重新安装 应用程序来解决这个问题 首先 这个问题经常出现在越狱的iPhone上 所以我们 认为配置可能有问题 个人资料 但现在 越来越多的用户抱怨这个问题 无法接收推送 他们使用
  • 如何比较两个git分支并通过提交消息过滤差异?

    我有一个名为的发布分支release X X X X其中包含我想要部署到生产的所有功能分支 发布分支是在master这是当前的生产状态 在每个发布日 我都会确保我们的发布分支仅包含计划用于发布的更改 我使用此命令来比较发布分支和主分支 gi
  • requireJs 订单插件:它可以存在于与 require.js 基本路径不同的路径中吗?

    使用订单插件时 require js 在给定的 basePath order js 中查找它 example require baseUrl public js require order http cdnjs cloudflare com
  • 如何将移动构造函数与二维数组 (**) 一起使用?

    可能是我错误地编码了我的类 但是当我使用移动构造函数而不是复制 cotr 作为重载之一 而不是准确地说 时 我的程序崩溃了 例如 class Sample int a int b constructor declarations 在 cpp
  • python 按键简单游戏

    我想在屏幕上看到一个符号 例如可能是 散列 符号会有一些起始位置 比如说 0 0 如果我按向右箭头 我希望看到标志向右移动 如果按向左箭头 我希望看到标志向左移动 等等 到目前为止 我的代码看起来像这样 它适用于读取 pos 但我想添加某种
  • Delphi 如何获取控件上的光标位置?

    我想知道 TCustomControl 上光标的位置 如何找到坐标 获取光标位置 http msdn microsoft com en us library ms648390 28v vs 85 29 aspx如果您无法处理鼠标事件 这会很
  • 动画 UIButton 的标题更改

    在这里我找到了如何制作动画UIButton的标题更改使用现已弃用beginAnimations context method iPhone 的 UIBUtton 标题动画 https stackoverflow com questions
  • 在 ASP.NET WebApi 2 中实现移动应用程序的外部身份验证

    我正在尝试构建一个 API 使用 ASP NET WebApi 该 API 将由学校项目的本机移动应用程序使用 我不关心 开发移动应用程序 这个责任由不同的成员承担 我现在需要实现基于令牌的 Facebook 登录 有很多教程可用于介绍如何
  • 如何以编程方式获取 Admob 的设备 ID?

    我有多个设备 而且可能还会有更多 并且不想一一添加 有人知道 Admob 使用什么 ID 吗 String aid Settings Secure getString getContext getContentResolver androi
  • Gem 安装错误可写和 PATH

    这是我遇到的两个错误 我使用的是 OS X 老实说 不知道我是否通过 gem 安装 如果这很重要的话 WARNING Installing to gem since Library Ruby Gems 1 8 and usr bin are
  • 将列表拆分为单独但重叠的块

    假设我有一个清单A A 1 2 3 4 5 6 7 8 9 10 我想创建一个新列表 比如说B 按以下顺序使用上面的列表 B 1 2 3 3 4 5 5 6 7 7 8 9 9 10 即前 3 个数字为A 0 1 2 后 3 个数字为A 2
  • GAE 云数据存储:获取最常编写的模型

    我正在尝试按最常编写的模型的降序排列模型列表 这是我到目前为止所尝试过的 client查询集提供模型及其属性 属性的详细信息 以及这些模型相关的详细信息 实体计数 内置索引计数 内置索引大小 数据大小 复合索引大小 复合索引计数 总大小 但
  • 为什么结构体的 sizeof 不安全

    The MSDN http msdn microsoft com en us library eahchzkf 28v vs 80 29 aspx明确指出 对于所有其他类型 包括结构体 sizeof 运算符只能 在不安全的代码块中使用 Th
  • 在 URLSearchParams 中使用 json 对象

    是否可以以某种方式将 json 对象附加到 URLSearchParams 对象上 所以而不是 urlSearchParams append search person it s urlSearchParams append search
  • 没有为 MySQLi 准备好的语句中的参数提供数据

    我一直在重新设计我的网站 从不受保护的 MySQL 查询到 mysqli 准备好的语句 一切都很顺利 直到我得到这个 没有为准备好的语句中的参数提供数据 if empty err pSETQuery NULL if empty POST p