背景
我试图写一个函数查询
query('type', 'parameters', 'bind_types')
我可以打电话进行简单的查询。 所有的MySQL查询在功能
grab_sql()
所有的结合发生在函数bind()
call_user_func_array
需要所以我写了引用才能正常工作ref_arr
以适应。
问题是,我没有得到的结果反馈,我需要 - 他们在下面的结果公布。 我认为这个问题是在绑定的reuslts的,因为我在该部件种类的猜测。
研究
- 预处理语句上的信息在这里
- 在信息
call_user_func_array
这里 - 对引用的neccessity信息
call_user_func_array
这里
问 :我怎样才能修改此代码以正确的得到正确的结果?
码
function ref_arr(&$arr)
{
$refs = array();
foreach($arr as $key => $value)
{
$refs[$key] = &$arr[$key];
}
return $refs;}
public function bind($query, $input_param, $btypes)
{
$a="test_var1";$b="test_var2";
$output_arr=array($a,$b);
$input_ref = $this->ref_arr($input_param);
$output_ref = $this->ref_arr($output_arr);
if($statement=mysqli_prepare(one::$db, $query))
{
array_unshift($input_ref, $statement, $btypes);
call_user_func_array("mysqli_stmt_bind_param", $input_ref);
mysqli_stmt_execute($statement);
array_unshift($output_ref, $statement);
call_user_func_array("mysqli_stmt_bind_result", $output_ref);
mysqli_stmt_fetch($statement);
var_dump($output_ref);
mysqli_stmt_close($statement);
}
}
public function grab($type)
{
switch($type)
{
case "validate_user":
$query="SELECT email,pass FROM cr WHERE email=? AND pass=?";
break;
case "another_query_type":
break;
}
return $query;
}
public function query($qtype, $arg_arr, $btypes)
{
return self::bind(self::grab_sql($qtype), $arg_arr, $btypes);
}
}
测试用例
<?php
require_once 'p0.php';
$db_ = new database();
$db_->query('validate_user',array('joe@gmail.com','Password'), 'ss');
?>
结果
该值导致似乎是(最后两个值)NULL和&NULL。
array(3) { [0]=> object(mysqli_stmt)#2 (9) {
["affected_rows"]=> int(-1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(2) ["field_count"]=> int(2) ["errno"]=> int(0) ["error"]=> string(0) "" ["sqlstate"]=> string(5) "00000" ["id"]=> int(1) } [1]=> &NULL [2]=> &NULL
}