2017-04-04 69 views
2

我的代码:参数3至mysqli_stmt_bind_param()预期为基准,给定值 - PHP

public function valRef($arr) { 

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

     var_dump($refs); 

     //var_dump($refs) returns something like this: 
     array(1) { 
     [0]=> 
     &int(1) 

     return $refs; 
} 

这是所使用的函数,其中。我不明白为什么返回的$refs阵列是不同的。它不应该和上面的一样吗?

var_dump($this->helperClass->valRef($ref)); 
array(1) { 
    [0]=> 
    int(1) 
} 

     call_user_func_array('mysqli_stmt_bind_param', array_merge(array($q, $prep), $this->helperClass->valRef($ref))); 
+1

PDO使这种事情变得微不足道。 'mysqli'是一个非常笨重的接口,会导致很大的摩擦。你现在是否承诺'mysqli'? – tadman

+1

'call_user_func_array'需要** 2 **参数。第一个参数是方法名“mysqli_stmt_bind_param”,第二个参数是提供给方法的参数数组。 –

+0

@tadman这是一个旧的项目。我只是想让它工作。我没有时间重做整个事情。所以我想我被困在mysqli中。 – Ciprian

回答

0

我想我明白了:

<?php 

echo '<pre>'; 

function valRef(&$arr) 
{ 
    $refs = array(); 

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

    var_dump($refs); 
    echo '<hr>'; 

    return $refs; 
} 


$arr = array(1, 5, 7, "hello"); 

$refs = valRef($arr); 

var_dump($refs); 
echo '<hr>'; 


$link = mysqli_connect('localhost', 'testman', 'agave'); 

$q = mysqli_prepare($link, "SELECT ?, ?, ?, ?"); 

$prep = "iiis"; 

call_user_func_array('mysqli_stmt_bind_param', array_merge(array($q, $prep), $refs)); 

mysqli_stmt_execute($q); 


mysqli_stmt_bind_result($q, $c1, $c2, $c3, $c4); 

while (mysqli_stmt_fetch($q)) 
{ 
    echo "$c1, $c2, $c3, $c4"; 
} 

mysqli_stmt_close($q); 

mysqli_close($link); 

?> 

我跑这我的服务器上,并得到了在我的web broswer以下的输出:

array(4) { 
    [0]=> 
    &int(1) 
    [1]=> 
    &int(5) 
    [2]=> 
    &int(7) 
    [3]=> 
    &string(5) "hello" 
} 

array(4) { 
    [0]=> 
    &int(1) 
    [1]=> 
    &int(5) 
    [2]=> 
    &int(7) 
    [3]=> 
    &string(5) "hello" 
} 

1, 5, 7, hello 

有帮助吗?

+0

谢谢。我会尝试一下,看看它。 – Ciprian

+0

不客气。 ...我真的可以使用那个赏金,提示,提示...... :-) – thetom

0

发生这种情况的原因是因为您传递了valRef($ arr)作为参数。由于该函数不是被引用的变量,因此无法找到指向它的指针。一旦分配给变量,它将有一个参考指针来处理。