我知道这已经得到解答,它只是询问您是否可以发送额外的参数,但我认为人们可能会遇到这个问题,并想知道如何绕过这个限制。这是我使用的解决方案:
$parameters = array('tid' => $tid, 'u_ID' => $u_ID, 'current_time' => $time);
$1st = $db->prepare($query1);
$1st->execute(array_intersect_key($parameters, array_flip(array('tid'))));
$2nd = $db->prepare($query2);
$2nd->execute(array_intersect_key($parameters, array_flip(array('u_ID', 'tid'))));
$3rd = $db->prepare($query3);
$3rd->execute(array_intersect_key($parameters, array_flip(array('u_ID', 'tid', 'current_time'))));
$4th = $db->prepare($query4);
$4th->execute(array_intersect_key($parameters, array_flip(array('u_ID', 'tid', 'current_time'))));
可以将 array_interset_key 和 array_flip 操作提取到它自己的函数中,例如:
function filter_fields($params,$field_names) {
return array_intersect_key($params, array_flip($field_names))
}
我只是还没来得及。
该函数翻转您的键名数组,因此您有一个没有值但有正确键的数组。然后 intersect 过滤第一个数组,这样您就只有两个数组中的键(在这种情况下,只有 array_flipped 数组中的键)。但是你得到了原始数组的值(不是空的)。因此,您制作一组参数,但指定实际发送到 PDO 的参数。
因此,使用该功能,您可以:
$parameters = array('tid' => $tid, 'u_ID' => $u_ID, 'current_time' => $time);
$1st = $db->prepare($query1);
$1st->execute(filter_fields($parameters, array('tid')));
$2nd = $db->prepare($query2);
$2nd->execute(filter_fields($parameters, array('u_ID', 'tid')));
$3rd = $db->prepare($query3);
$3rd->execute(filter_fields($parameters, array('u_ID', 'tid', 'current_time')));
$4th = $db->prepare($query4);
$4th->execute(filter_fields($parameters, array('u_ID', 'tid', 'current_time')));
如果你有 PHP 5.4,你可以使用方括号数组语法,让它更酷:
$parameters = array('tid' => $tid, 'u_ID' => $u_ID, 'current_time' => $time);
$1st = $db->prepare($query1);
$1st->execute(filter_fields($parameters, ['tid']));
$2nd = $db->prepare($query2);
$2nd->execute(filter_fields($parameters, ['u_ID', 'tid']));
$3rd = $db->prepare($query3);
$3rd->execute(filter_fields($parameters, ['u_ID', 'tid', 'current_time']));
$4th = $db->prepare($query4);
$4th->execute(filter_fields($parameters, ['u_ID', 'tid', 'current_time']));