2012-06-15 2 views
1

Давайте предположим, что у меня есть все эти уже предусмотрены:Как выполнить запрос вставки с неизвестным числом параметров в PHP?

  • Имя таблицы
  • Массив, содержащий имена столбцов в таблице
  • Соответствующий массив, содержащий значения, которые я хочу, чтобы вставить в таблицу, а также типы этих значений.

Я обычно делаю запрос, как этот

$stmt = mysqli_stmt_init($mysqli); 
if (mysqli_stmt_prepare($stmt, 'INSERT INTO `Table` (columns) VALUES (values) ')) { 
    mysqli_stmt_bind_param($stmt, /* types */, /* values */); 
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_close($stmt); 
} 

Но я не могу понять, как сделать это более общее, так что я могу кормить в моих именах столбцов, значения и типов, и выполнить запрос.

Каков наилучший способ для этого? Я бы предпочел не устанавливать библиотеку для этой цели.

+0

я имел успех, используя ассоциативный массив для параметров - ключи являются именами столбцов и значений являются, ээ, то значения. –

ответ

5

Ну для имен столбцов вы можете просто сделать implode массива столбцов и sprintf в свой запрос.

Для типов вы можете также implode их в строки и подать их в mysqli_stmt_bind_param.

Для значений, которые вы должны сделать некоторые сложные манипуляции (с использованием call_user_func_array):

$args = array(); // to be put into call_user_func_array 

$args[] =& $stmt; // because the statement HAS TO be by reference. 
$args[] = implode("", $types); 

foreach($values as $value){ 
    $args[] = $value; 
} 

call_user_func_array("mysqli_stmt_bind_param", $args); 
+0

Я пробовал это, но я получил сообщение о том, что 'bind_param' получил значение в качестве второго параметра, когда ожидал ссылку. –

+0

@PeterOlson ahhh извините, я забыл '&' попробовать его сейчас :-) – Neal

+0

@PeterOlson Это работает для вас сейчас? – Neal

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