php – 使用一个带有可变数量输入变量的bind_param()

前端之家收集整理的这篇文章主要介绍了php – 使用一个带有可变数量输入变量的bind_param()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试使用这样的变量绑定:
$stmt = $MysqLi->prepare("UPDATE mytable SET myvar1=?,myvar2=... WHERE id = ?")) {
$stmt->bind_param("ss...",$_POST['myvar1'],$_POST['myvar2']...);

但是一些$_POST [‘…’]可能是空的,所以我不想在DB中更新它们.

考虑到空$_POST [‘…’]的所有不同组合并不实际,虽然我可以根据我的需要构建字符串“UPDATE mytable SET …”,但bind_param()是一个不同的野兽.

我可以尝试将其调用作为字符串构建并使用eval()但它感觉不对:(

您可以使用 call_user_func_array函数使用可变数字或参数调用bind_param方法
$paramNames = array('myvar1','myvar2',/* ... */);
$params = array();
foreach ($paramNames as $name) {
    if (isset($_POST[$name]) && $_POST[$name] != '') {
        $params[$name] = $_POST[$name];
    }
}
if (count($params)) {
    $query = 'UPDATE mytable SET ';
    foreach ($params as $name => $val) {
        $query .= $name.'=?,';
    }
    $query = substr($query,-1);
    $query .= 'WHERE id = ?';
    $stmt = $MysqLi->prepare($query);
    $params = array_merge(array(str_repeat('s',count($params))),array_values($params));
    call_user_func_array(array(&$stmt,'bind_param'),$params);
}

猜你在找的PHP相关文章