2015-12-16 2 views
1

Я пытаюсь создать динамически подготовленный оператор, но я застрял в части bind_param. Я пытался читать другие ответы, относящиеся к call_user_func_array, но я не мог понять, как адаптировать его здесь:Динамически привязывать параметры к оператору mysqli

//connecting 
$connection = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME); 

//info submitted through a form 
$values_columns = array(
         "column_one" => "value_one", //value_one will be replaced by $_POST['value_one'] 
         "column_two" => "value_two", //value_two will be replaced by $_POST['value_two'] 
         "column_three" => "value_three" //value_three will be replaced by $_POST['value_three'] 
         ); 

$value_type = implode('', array('s', 's', 's')); 

//preparing and binding my query dinamically 
function prepare_bind($table_name, $values_columns, $value_type) { 

    global $connection; 

    $columns_string = ""; 
    $question_marks = ""; 

    $flag = 0; 
    $count = count($values_columns); 

    foreach ($values_columns as $column => $value) { 

     $flag++; 

     // building the prepare 
     if ($flag == $count) { 
      $columns_string .= $column; 
      $question_marks .= "?"; 
     } else { 
      $columns_string .= $column . ", "; 
      $question_marks .= "?, "; 
     } 
    } 

    $sql = $connection->prepare('INSERT INTO ' . $table_name . ' (' . $columns_string . ') VALUES (' . $question_marks . ')'); 
    $sql->bind_param($value_type, /*I am stuck here while trying to add the values*/); 
} 

Есть ли способ, чтобы выйти из этой ситуации. Это первый раз, когда я использую этот подход, и я не знаю, правильно ли я это понял. Большое спасибо.

+0

Вы лучше использовать массив значений, то 'присоединиться («» , $ arr) ', чтобы избежать наличия конечной запятой. Вы можете использовать 'array_fill' для создания массива вопросительных знаков. – Ian

+0

http://php.net/manual/en/function.implode.php –

+0

'implode' является псевдонимом' join'. – Ian

ответ

0

простое решение для создания заполнителей:

function placeholderMarks($count) { 
    return join(', ', array_fill(0, $count, '?')); 
} 

вставить результат этой функции в запросе с placeholderMarks(count($values_columns))

Смежные вопросы