我目前正在努力解决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的问题的解决方案吗?
答案 0 :(得分:1)
有趣的是,在过去大约12个小时的时间里与之抗争之后,我实际上设法在启动该线程的几分钟之内找到了解决该问题的方法。
通过将数组前面的“ ...”,可以将数组用作准备好的语句的数据。 例如,在我的情况下:
mysqli_stmt_bind_param($preparedStatement, 'ssss', ...$data);