gpt4 book ai didi

php - 来自 JSON 的 mysql 中的 bind_param

转载 作者:行者123 更新时间:2023-11-29 21:37:11 25 4
gpt4 key购买 nike

我想创建一个“适合所有人”的函数来更新 SQL 数据库。

想象一下,我有一个包含列的数据库表:

  • id (int)
  • col1 (varchar)
  • col2 (varchar)
  • col3 (varchar)
  • col4 (varchar)
  • col5 (int)

  • 现在 php 脚本接收到一些 JSON,如下所示:
    { id : 5,
    col3 : "somevalue",
    col5 : 17 }

    所以我想用一个干净的 MySqli 语句重新创建一个更新函数:
    $stmt = $db->prepare("UPDATE `table` SET `col3` = ?, `col5` = ? WHERE `id` = ?;");
    $stmt->bind_param("sii", $obj->col3, $obj->col5, $obj->id);
    $stmt->execute();

    一开始看起来很简单,但我不明白我应该如何在 bind_param 方法中动态重新创建参数列表。它不采用数组,而是采用不同参数中的所有值..

    问题:如何在不知道有多少列以及它们是什么类型的情况下重新创建 bind_param。

    列出变量的种类很简单,迭代所有对象参数并在这种情况下创建一个包含“sii”的字符串。

    json 对象属性始终反射(reflect)表的列。

    最佳答案

    正如 Rajdeep Paul 所建议的,我切换到 PDO。
    PDO 提供了更大的灵 active ,它接受一组命名参数。对于任何想要实现相同目标的人来说,最终代码如下所示:

        $data = $_POST['carData'];
    $params = [];
    $updateString = "";

    foreach ($data as $key => $value)
    {
    if($key != "id")$updateString .= $key." = :".$key.",";
    $params[':'.$key] = $value;

    }
    $updateString = rtrim($updateString, ","); //remove last ,


    $stmt = $pdo->prepare("UPDATE cars SET ".$updateString." WHERE id = :id");
    $stmt->execute($params);

    我只是删除了更新字符串的“id”,因为它真的没有意义,更新特别是 1 id,但可能会被忽略。

    关于php - 来自 JSON 的 mysql 中的 bind_param,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34838939/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com