2015-04-01 5 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

попробовать это: добавить & в функции парам и удалить & внутри цикла Еогеасп.

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

Я все еще получаю 'Warning: Parameter 2 до mysqli_stmt :: bind_param(), как ожидается, будет ссылка, значение given' – Ciprian

+0

ОК моих плохие , я попытаюсь отредактировать свой ответ выше –

+0

Теперь я получаю эту ошибку: 'Fatal error: Uncaught exception 'mysqli_sql_exception' с сообщением 'Число столбцов не соответствует количеству значений в строке 1'' – Ciprian

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 
Смежные вопросы