将可变数量的值绑定到准备好的语句

时间:2019-06-27 22:40:55

标签: php mysql mysqli prepared-statement procedural

我目前正在努力解决MySQLi准备好的语句的一个小问题。我正在尝试编写一个自定义PHP函数,该函数需要几个变量,并使用它们通过准备好的语句将一些数据写入数据库中的表中。

问题是我需要函数接受任意数量的参数。

该函数的作用示例:

db_insert_secure("Goals", "(Name, Description, Type, ProjectID)", $data);

这应该将$ data数组中存储的所有信息写入目标表中的(4)指定行。

但是,由于参数的数量可以改变,所以我想不出一种有效地绑定它们的方法。

我曾经想到的一个想法是使用switch语句来处理绑定不同数量的参数,但这肯定不是最雄辩或最有效的方法。

整个脚本:

function db_insert_secure($table, $columns, $data)
{
    $link = db_connect();

    $inputData = explode(",", $columns);
    $query = "INSERT INTO ".$table." ".$columns." VALUES (";

    for ($i = 0; $i < sizeof($inputData); $i ++)
    {
            $query .= "?";

            if ($i != sizeof($inputData) - 1)
            {
                $query .= ", ";
            }
    }

    $query .= ")";
    echo $query;

    $check_statement = mysqli_prepare($link, $query);
    //mysqli_stmt_bind_param($check_statement, 's', $data[0]);

    echo $check_statement;

    db_disconnect($link);
}

注意:db_connect和db_disconnect脚本是用于打开和关闭与数据库的连接的自定义脚本。 db_connect只是返回连接对象。

有人能想到 涉及使用eval的问题的解决方案吗?

1 个答案:

答案 0 :(得分:1)

有趣的是,在过去大约12个小时的时间里与之抗争之后,我实际上设法在启动该线程的几分钟之内找到了解决该问题的方法。

通过将数组前面的“ ...”,可以将数组用作准备好的语句的数据。 例如,在我的情况下:

mysqli_stmt_bind_param($preparedStatement, 'ssss', ...$data);