2017-04-04 68 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)作爲參數。由於該函數不是被引用的變量,因此無法找到指向它的指針。一旦分配給變量,它將有一個參考指針來處理。