当你不知道你将要接收的参数数量时,你们做了什么?
例如:
if($a==1) $filter.=" AND u.name = ?";
if($b==1) $filter.=" AND u.address = ?";
if($c==1) $filter.=" AND u.age = ?";
if($d==1) $filter.=" AND u.city = ?";
ETC...
$stmt->prepare("SELECT id
FROM users u
WHERE u.cp = ?
".$filter);
$stmt->bind_param("i", $cp);
现在?如果您收到$a = 1
,则会收到错误,因为您只在bind_param
上传递了1个参数。所以你不知道你是否会收到1,2,3或4个参数并且我不想做很多IF
或者我必须使用循环来计算参数的数量? / p>
答案 0 :(得分:1)
添加条件时,您必须管理参数列表(类型和值)。这意味着您需要使用call_user_func_array
将值列表传递给bind_param
。
基本上,在每个if
语句中,不仅要添加条件,还要添加参数类型(例如$types .= 'i'
)和参数(例如$args[]=$arg
)。
您可以在bind_param
文档的评论中找到关于如何执行此操作的一个很好的示例:http://www.php.net/manual/en/mysqli-stmt.bind-param.php#109256