вставить в таблицу - заменить имена столбцов и их значения на массивы

0

два массива:

$columns = array('mail', 'phone', 'author', 'title');
$values = array('some mail', 'some phone', 'an author', 'a title');

Возможно ли что-то вроде этого:

$sql = "insert into actual (" . implode(', ', $columns) . ") values (" . implode(', ', $values) . ")";
$st = $db->prepare($sql);
$st->execute();  // line 23

Я попытался получить синтаксическую ошибку в строке 23.

  • 1
    попробуйте показать нам var_dump ($ sql)
  • 0
    взрыв не обернуть строку правильными кавычками ..
Показать ещё 4 комментария
Теги:

1 ответ

2
Лучший ответ

Чтобы написать это как подготовленное выражение с владельцами мест, вам нужно повторить ? для каждого поля, а затем передать значения с помощью bindParam() (при условии, что mysqli)...

$columns = array('mail', 'phone', 'author', 'title');
$values = array('some mail', 'some phone', 'an author', 'a title');
// Create place holders (need to remove last comma - done in build of SQL)
$valuesPlace = str_repeat("?,", count($values));
$sql = "insert into actual (" . implode(', ', $columns) . ") 
    values (" . rtrim($valuesPlace, ",") . ")";

$st = $db->prepare($sql);
// Bind a list of string values (big assumption)
$st->bindParam(str_repeat("s", count($values)), ...$values);
$st->execute();  // line 23
  • 0
    Хотя это и есть решение, в конечном итоге это действительно дурацкая имитация правильного ORM. Если вам нужен такой вид динамического построения запросов, который действительно может упростить разработку кода, используйте реальный ORM.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню