bind_param中的参数数量未知

时间:2014-07-08 08:28:30

标签: php mysql mysqli

当你不知道你将要接收的参数数量时,你们做了什么?

例如:

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>

1 个答案:

答案 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