确定变量数量并自动使用正确数量的变量bind_param

时间:2017-03-20 14:30:10

标签: php mysql arrays mysqli prepared-statement

在底部,我有一个函数,它接受一系列MySQL查询并自动准备语句。所以我可以设置如下的数组:

$queryTest = array(
    array(
        'query' => 'SELECT * FROM tools WHERE RFID_tag = ? AND editedByID = ?',
        'paramTypes' => 'si',
        'params' => array('EXAMPLE_RFID_TAG', 1001)
    ),
    array(
        'query' => 'SELECT * FROM tool_categories WHERE categoryID = ?',
        'paramTypes' => 'i',
        'params' => array(1)
    )
);

然后拨打$resultArray = db_multi_query($queryTest);然后你可以处理它,不管你认为合适。

我的问题是:有没有更好的方法来确定我的数组中的语句变量的数量,以自动填充bind_param变量,而不是通过检查变量的数量{{1然后manaully向bind_param添加更多变量?我希望它能自动使用变量填充bind_param,这样我就可以缩短这个函数并使其成为我不能限制在函数中设置if(count($query['params']) == 5){的数量。

if(count($query['params']) == int){

提前谢谢。

1 个答案:

答案 0 :(得分:1)

使用Array Unpacking,又名" splat"在PHP 5.6.0中引入的运算符(和官方称为" Variadics"),您可以解包" params"将数组放入bind_param()来电,以便替换

if(count($query['params']) == 1){
    $MySQLquery->bind_param($query['paramTypes'], $query['params'][0]);
}
if(count($query['params']) == 2){
    $MySQLquery->bind_param($query['paramTypes'], $query['params'][0], $query['params'][1]);
}
if(count($query['params']) == 3){
    $MySQLquery->bind_param($query['paramTypes'], $query['params'][0], $query['params'][1], $query['params'][2]);
}
if(count($query['params']) == 4){
    $MySQLquery->bind_param($query['paramTypes'], $query['params'][0], $query['params'][1], $query['params'][2], $query['params'][3]);
}
if(count($query['params']) == 5){
    $MySQLquery->bind_param($query['paramTypes'], $query['params'][0], $query['params'][1], $query['params'][2], $query['params'][3], $query['params'][4]);
}

if(count($query['params']) > 1) {
    $MySQLquery->bind_param($query['paramTypes'], ...$query['params']);
}

然后,只要数字与您的$query['paramTypes']

相符,那么您通过的参数数量并不重要