首页 > 解决方案 > 将参数传递给php中的补丁函数

问题描述

我刚刚开始在 php 中开发代码,目前我正在为我大学的一名教师开发一个小型 API。

我正在使用准备好的语句与 MySQL 数据库进行交互,但在此函数中,参数不会传递给函数。

function patch_admin() {

    global $db,$file, $settings;
    $payload = get_json();

    if($payload[password_crypt] != NULL)
    {
        metamessage(lang('please_use_password_function'));
        return HTTP_BAD_REQUEST;
    }

    if($payload[admin_id] != NULL)
    {
        foreach($payload as $key => $value) {
            if($key == "admin_id") { continue; }

            $querystr="UPDATE " .table('admin'). " SET :key=:value WHERE admin_id=:admin_id";
            $params = [ ':key' => $key, ':value' => $value, ':admin_id' => $payload[admin_id]];
            $query = $db->prepare($querystr);
            $query->execute($params);
       }
   }

   return HTTP_BAD_REQUEST;
}

查询和参数如下所示:

UPDATE or_admin 
SET :key = :value 
WHERE admin_id=:admin_id

Array
(
    [:key] => fname
    [:value] => Bernharddiener
    [:admin_id] => 1626704194
)

我在这里遗漏了一些明显的东西吗?

当我用字段名称替换 :key 时,我可以修补数据库,但我想从我发送的 JSON 中获取列名称。

最好的问候, 蒂尔

标签: phpprepared-statement

解决方案


您应该以与表名相同的方式检查和设置参数

前任 :

    $querystr="UPDATE " .table('admin'). " SET `".mysql_real_escape_string($key)."` =:value WHERE admin_id=:admin_id";
    $params = [ ':value' => $value, ':admin_id' => $payload[admin_id]];

推荐阅读