可以传递变量字符串:到 stmt->bind_param()?
Possible to pass string of variables: to stmt->bind_param()?
我所处的情况是从 $_GET 值动态创建 mysqli 查询,这些值总是根据所做的自定义搜索而变化。是否可以传递格式正确(动态创建)的字符串来显示相关的不同变量。
示例:
$变量类型列表 = "sss";
$variablestring = "$dogs, $cats, $weasels";
$stmt->bind_param($variabletypelist, $variablestring);
因此最终结果看起来类似于
stmt->bind_param($variabletypelist,$dogs, $cats, $weasels)
我意识到这是一个问题,因为 $variablestring 被用作要绑定的变量,而不是绑定到 $dogs、$cats、$weasels。
有什么简单的方法可以用变量的字符串来做到这一点吗?
有许多使用动态数量参数调用 mysqli_stmt::bind_param
的解决方案,其中 none 涉及将列表描述为字符串,这很愚蠢。当你需要一个列表时,你可以使用 array.
您可以使用 call_user_func_array()
调用 PHP 中的任何函数,并在数组中指定调用它时使用的参数。它会产生一个问题,因为 mysqli_stmt::bind_param
的参数必须作为引用传递而不是按值传递,但是可以制定解决方法。
示例:
$vars = [$dogs, $cats, $weasels];
$refs = [$variabletypelist];
foreach ($vars as &$val)
$refs[] = &$val;
call_user_func_array([$stmt, 'bind_param'], $refs);
如果您觉得此语法令人困惑,您也可以使用此方法的非 oop 版本:
$vars = [$dogs, $cats, $weasels];
$refs = [$stmt, $variabletypelist];
foreach ($vars as &$val)
$refs[] = &$val;
call_user_func_array('mysqli_stmt_bind_param', $refs);
也可以用 ReflectionClass()
来完成,(我没有测试)显然不需要修复引用:
$vars = [$dogs, $cats, $weasels];
$ref = new \ReflectionClass('mysqli_stmt');
$met = $ref->getMethod('bind_param');
$met->invokeArgs($stmt, array_merge([$variabletypelist], $vars));
我所处的情况是从 $_GET 值动态创建 mysqli 查询,这些值总是根据所做的自定义搜索而变化。是否可以传递格式正确(动态创建)的字符串来显示相关的不同变量。
示例: $变量类型列表 = "sss"; $variablestring = "$dogs, $cats, $weasels";
$stmt->bind_param($variabletypelist, $variablestring);
因此最终结果看起来类似于
stmt->bind_param($variabletypelist,$dogs, $cats, $weasels)
我意识到这是一个问题,因为 $variablestring 被用作要绑定的变量,而不是绑定到 $dogs、$cats、$weasels。
有什么简单的方法可以用变量的字符串来做到这一点吗?
有许多使用动态数量参数调用 mysqli_stmt::bind_param
的解决方案,其中 none 涉及将列表描述为字符串,这很愚蠢。当你需要一个列表时,你可以使用 array.
您可以使用 call_user_func_array()
调用 PHP 中的任何函数,并在数组中指定调用它时使用的参数。它会产生一个问题,因为 mysqli_stmt::bind_param
的参数必须作为引用传递而不是按值传递,但是可以制定解决方法。
示例:
$vars = [$dogs, $cats, $weasels];
$refs = [$variabletypelist];
foreach ($vars as &$val)
$refs[] = &$val;
call_user_func_array([$stmt, 'bind_param'], $refs);
如果您觉得此语法令人困惑,您也可以使用此方法的非 oop 版本:
$vars = [$dogs, $cats, $weasels];
$refs = [$stmt, $variabletypelist];
foreach ($vars as &$val)
$refs[] = &$val;
call_user_func_array('mysqli_stmt_bind_param', $refs);
也可以用 ReflectionClass()
来完成,(我没有测试)显然不需要修复引用:
$vars = [$dogs, $cats, $weasels];
$ref = new \ReflectionClass('mysqli_stmt');
$met = $ref->getMethod('bind_param');
$met->invokeArgs($stmt, array_merge([$variabletypelist], $vars));