2015-04-01 131 views
0

我試圖創建一個函數,它將採取一個數組並創建列和值,但我不知道如何返回與函數的引用。任何幫助表示讚賞。PHP返回參考

private function data($data) { 

    $columns = ""; 
    $values = array(); 

    foreach ($data as $column => $value) { 
     $columns .= ($columns == '') ? '' : ', '; 
     $columns .= $column; 
     $values[$column] = &$data[$column]; 
    } 

    return array($columns, $values); 

} 

這是在數據庫中插入數據的函數。

/** 
* Insert item into items table. 
* 
* @param (array) $data - Column => value array created in item class. 
*/ 
public function insertItem($data) { 

    $columns = ""; 
    $values = array(); 

    $prep = "isiisiisiiis"; 

    /*foreach ($data as $column => $value) { 
     $columns .= ($columns == '') ? '' : ', '; 
     $columns .= $column; 
     $values[$column] = &$data[$column]; 
    }*/ 

    $theData = $this->data($data); 

    $a = str_repeat('?, ', count($data)); 
    $b = substr_replace($a, '', -2); 

    $q = $this->db->mysqli->prepare("INSERT INTO items ($columns) VALUES ($b)"); 

    call_user_func_array(array($q, 'bind_param'), array_merge(array($prep), $values)); 
    $q->execute(); 
    $q->close(); 

    //return id 
    return $this->db->mysqli->insert_id; 

} 

編輯**工作代碼:

private function data(&$data) { 

    $columns = ""; 
    $values = array(); 

    foreach ($data as $column => $value) { 
     $columns .= ($columns == '') ? '' : ', '; 
     $columns .= $column; 
     $values[$column] = &$data[$column]; 
    } 

    return array($columns, $values); 

} 

和訪問它像這樣:

$theData = $this->data($data); 
$theData[0]; //$columns 
$theData[1]; //$values 

回答

0

試試這個:在功能PARAM添加&並取出& foreach循環中。

private function data (&$data) 
{ 

    $columns = ""; 
    $values = array(); 

    foreach ($data as $column => $value) 
    { 
     $columns .= ($columns == '') ? '' : ', '; 
     $columns .= $column; 
     $values[$column] = $data[$column]; 
    } 

    return array ($columns, $values); 
} 

公共職能insertItem內取出$theData =

public function insertItem ($data) 
{ 
    [..] 
    $this->data ($data); 
} 
+0

我仍然得到'警告:參數2 mysqli_stmt :: bind_param()預計爲參考,值given' – Ciprian 2015-04-01 17:31:44

+0

確定我的壞。我會嘗試編輯我的答案 – 2015-04-01 17:47:53

+0

以上現在我得到這個錯誤:'致命錯誤:未捕獲的異常'mysqli_sql_exception'消息'列計數與第1行的值計數不匹配' – Ciprian 2015-04-01 18:26:25

0
private function data(&$data) { 

    $columns = ""; 
    $values = array(); 

    foreach ($data as $column => $value) { 
     $columns .= ($columns == '') ? '' : ', '; 
     $columns .= $column; 
     $values[$column] = &$data[$column]; 
    } 

    return array($columns, $values); 

} 


$theData = $this->data($data); 
$theData[0]; //$columns 
$theData[1]; //$values