2016-09-06 31 views
0

JSON對象是否有值表我有這與下面的SQL語句創建一個表如何插入,只有在PHP

CREATE TABLE example (
     col1 varchar(20) DEFAULT NULL, 
     col2 varchar(20) DEFAULT NULL, 
     col3 varchar(20) DEFAULT NULL 
) 

我想從一個JSON對象插入值到這個表。 JSON對象的構造方式是,其鍵是列名,值是要插入的值。

如何編寫PHP代碼以僅插入JSON對象中的值?

舉例來說,如果我有一個JSON對象

{ 
    "col1": "some value", 
    "col3": "some value" 
} 

insert語句應該只插入值col1和COL3和COL2應保持爲NULL。

請幫我解決這個難題。與PDO的PHP是可取的。

實驗至今進行

$object = json_decode($jsonObject); 

foreach ($object as $col => $val) { 
     $columns .= $col . ","; 
     $values .= $val . ","; 
} 

$sql = "INSERT INTO example (" .substr($columns, 0, strlen($columns)-2) . 
     ") VALUES (" . substr($values, 0, strlen($columns)-2) . ")"; 
+0

你先做一些嘗試是可取的。 –

+0

我做到了。我會在短時間內發佈代碼 –

+0

執行'insert'語句時'col2'是否從'null'改變?如果是這樣,它會變成什麼? –

回答

0

你的代碼是非常接近。問題是您沒有在$values中的每個值附近引用引號。

這裏是另一種方式來寫它:

$object = json_decode($jsonObject, true); 
$columns = implode(', ', array_keys($object); 
$values = implode(', ', array_map(function($x) { return "'$x'"; }, $object)); 

$sql = "INSERT INTO example($columns) VALUES ($values)"; 

array_map()回報與周圍的引號各個值的功能,然後implode()結合他們都用逗號。

如果您使用的是PDO,則可以將值數組傳遞給PDOStatement::execute()

$values = array_values($object); 
// Create "?, ?, ?, ..." string with enough placeholders for the values 
$placeholders = implode(', ', array_fill(0, count($values), '?')); 
$sql = "INSERT INTO example($columns) VALUES ($placeholders)"; 
$stmt = $pdo->prepare($sql); 
$result = $stmt->execute($values); 
+0

令人敬畏!!! ...精彩的答案。非常感謝你 –

+0

雖然有一點小問題,這個插入語句對SQL注入是開放的,對吧?我如何使用PDO的bindParam()解決這個問題? –

+1

我已經更新了答案,以顯示如何傳遞值的數組來執行。 – Barmar