bind_param不使用值

时间:2016-02-07 02:28:28

标签: php mysqli

前几天我遇到了bind_param这个问题,我发现了一个临时解决方案,但这不是正确的做法。 我需要在注册用户时使用dinamically绑定变量,所以我使用INSERT INTO查询。 一开始我认为可能是因为我必须通过引用传递值,但是当我在php.net上阅读时,因为php 5.3你不必再通过引用传递值了。 所以我尝试过,尝试过但尝试过但却无法理解我的错误。

$statem->bind_param("$format",$values); // WORKING

我通过替换

来完成这项工作
$statem->bind_param("$format",$values[0],$values[1],$values[2]); // WORKING

用这个

No data supplied for parameters in prepared statement

因为$ values是一个用注册字段组成的数组,所以要添加用户,我有用户名,密码和电子邮件,3个字段,这样就可以了。问题是我不能使用这个脚本来运行动态查询,因为它不适用于我所说的行,变量$ values是一个数组,我不明白为什么bind_param不接受它。 事实上,我得到的错误是:

./LzmaUtil.exe e input.elf output.elf
./LzmaUtil.exe d output.elf input.elf

因为似乎bind_param无法使用该变量$ values

我也尝试了call_user_function_array,但也没有让它工作。 谁能告诉我哪里失败了?它可能是ref值的东西吗?因为我不确定,因为我现在读了,你不再需要通过引用传递值了。而且我也尝试这样做,它没有用,也许我做得不对。

1 个答案:

答案 0 :(得分:0)

两种可能性。一,如评论中所述,使用call_user_func_array(),它允许您将参数数组传递给任何函数。编辑:根据this answer,将call_user_func_array()bind_param()一起使用非常棘手。

array_unshift($values, $format);
$statem = $DB->prepare("INSERT INTO $table($fields) VALUES ($placeholders)");
call_user_func_array(
    array($statem, "bind_param"),
    refValues($values)
);
$statem->execute();

function refValues($arr){
    $refs = array();
    foreach($arr as $key => $value)
        $refs[$key] = &$arr[$key];
    return $refs;
}

另一种可能是更多工作,但值得研究;您需要将数据库对象更改为PDO而不是mysqli。但是你可以这样做,因为PDO没有所需变量的绑定。

$statem = $DB->prepare("INSERT INTO $table($fields) VALUES ($placeholders)");
$statem->execute($values);
if($statem->rowCount() > 0) {
    return true;
}