前几天我遇到了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值的东西吗?因为我不确定,因为我现在读了,你不再需要通过引用传递值了。而且我也尝试这样做,它没有用,也许我做得不对。
答案 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;
}