2016-05-17 2 views
0

У меня есть массив как это:Php, Mysql вставки динамического запроса

stdClass Object 
(
    [id] => 1 
    [name] => John 
    [email] => [email protected] 
    [website] => google.com 
    [phone] => 0-(343)926-3114 
    [address] => 620 Main Center 
    [city] => Fukushima-shi 
    [country] => JP 
    [zip] => 
    [vat] => 123456 
    [status] => 1 
    [created] => 2016-03-10 15:56:44 
) 

, но я не знаю, ключи и значения, поскольку каждый массив будет отличаться. Мне нужно вставить массив в базу данных. Что-то вроде:

$keys = ''; 
$values = ''; 
foreach ($array as $key => $value) { 
    $keys .= implode(",", $key); 
    $values .= implode(",", $value); 
} 
"INSERT INTO `users` ($keys) VALUES ($values);" 

Мой пример не работает, так как взрывать требует массив

+1

Прежде всего, один из них не является массивом. Это объект –

+0

Как вы получаете этот «объект»? –

+0

Я могу использовать массив для массива (массив) $ array object – Alko

ответ

0

Рассмотрим с использованием альтернативного формата вставки: INSERT INTO tbl SET x=1, y=2...

Это также отличная возможность для подготовленных запросов:

$mapped = array_map(function($k) {return "`".$k."` = ?";},array_keys($array)); 
$stmt = $dbconnection->prepare("INSERT INTO `users` SET ".implode(", ",$mapped); 
$stmt->execute(array_values($array)); 

Точный код, в том числе способ передачи значений параметров, будет отличаться, но вышеописанный стиль PDO-ish. В вашем примере, вы бы в конечном итоге с:

INSERT INTO `users` SET `id` = ?, `name` = ? ... 

И значения 1, John ... будет направлен соответствующим образом.

+0

Я думаю, что ваша строка списка неверна $ stmt-> execute (array_values ​​($ mapped)); он должен быть $ stmt-> execute (array_values ​​($ array)); – Alko

+0

@Alko Действительно, хорошо заметили! –

0

Проблема в вашем коде заключается в том, что вы вставляете строку, а не массив. Делайте это следующим образом:

foreach ($obj as $key => $value) { 
    $keys[] = "`$key`"; 
    $values[] = "'$value'"; 
} 

$keys = implode(",", $keys); 
$values = implode(",", $values); 

$sql = "INSERT INTO `users` ($keys) VALUES ($values);"; 
Смежные вопросы