2016-11-06 59 views
0

我需要將具有我的用戶數據的JSON文件遷移到使用PHP的MySQL表中,我已經做了一個連接,使用DB創建了一個表,然後將JSON解碼爲一個數組。我不能做的是將數組數據插入到MySQL用戶表中。如何使用PHP在MySQL表中插入數組?

我的JSON是這樣的:

{ 
    "nombre":"asudhau", 
    "apellido":"uhsaudhau", 
    "pass":"$2y$10$KAg3wt7bBjphgdCNJf4VXe.an8lOnlOvWVdVsh2Qsws0dbhWiDwkO", 
    "mail":"[email protected]", 
    "sexo":"F", 
    "id":34, 
    "nacimiento":"2016-10-06" 
} 
{ 
    "nombre":"abudasd", 
    "apellido":"hasdua", 
    "pass":"$2y$10$c781KdL3ERgDCnP6MR28xuf\/dnKjuVajklc0uSj2FnBrZSB1H88Si", 
    "mail":"[email protected]", 
    "sexo":"F", 
    "id":35, 
    "nacimiento":"1990-02-03" 
} 
{ 
    "nombre":"audihaiudh", 
    "apellido":"uiahsdiuahdi", 
    "pass":"$2y$10$Q7VjafKxt\/kuJS1BrslF0uSZPwHe7Hvp6olMxetgY31KcmMT9dIo2", 
    "mail":"[email protected]", 
    "sexo":"F", 
    "id":36, 
    "nacimiento":"1999-02-03" 
} 

我得到了每個用戶的這樣的價值觀:

$conn = new PDO('mysql:host=localhost;dbname=dh_usuarios;charset=UTF8mb4', 'root', ''); 
    $jsondata = file_get_contents('../usuarios.json'); 
    $usuariosArray = explode(PHP_EOL, $jsondata); 

    foreach ($usuariosArray as $usuario) { 
     $jsondata = json_decode($usuario.PHP_EOL, true); 
     $jsonarray[] = array($jsondata); 
    } 
     foreach ($jsonarray as $row) { 

     $nombre = $row[0]['nombre']; 
     $apellido = $row[0]['apellido']; 
     $pass = $row[0]['pass']; 
     $mail = $row[0]['mail']; 
     $sexo = $row[0]['sexo']; 
     $id = $row[0]['id']; 
     $nacimiento = $row[0]['nacimiento']; 
} 

現在我想這個用戶數據插入到我已經創建了一個表在MySQL中,我不知道該怎麼做。

我試過了,但它只是不插入數據。

$stmt = $conn->prepare(' 
    INSERT INTO dh_usuarios(nombre, apellido, pass, mail, sexo, id, nacimiento) 
    VALUES(:nombre, :apellido, :pass, :mail, :sexo, :id, :nacimiento); 
    '); 

    $stmt->execute([ 
    ':nombre' => $nombre, 
    ':apellido' => $apellido, 
    ':pass' => $pass, 
    ':mail' => $mail, 
    ':sexo' => $sexo, 
    ':id' => $id, 
    ':nacimiento' => $nacimiento, 
    ] 
); 

幫幫我該怎麼辦? (抱歉我的英語不好,我來自阿根廷)

+0

您是否檢查數據庫中的錯誤? – Machavity

+0

我似乎不是從數據庫中的錯誤,我想我犯了一個錯誤的地方,但我無法弄清楚...... –

+0

嘗試'var_dump($ jsondata)'檢查你是否有什麼。 –

回答

1

有兩種方法可以修復你的代碼。

1)固定JSON格式(推薦)

您的JSON文件是無效的,你有多個根元素。如果你可以改變它,這將是第一步要做的事情:

[ 
    {...}, 
    {...}, 
    {...} 
] 

後,您的固定JSON文件的格式,可以簡化你的PHP代碼。以下部分:

$usuariosArray = explode(PHP_EOL, $jsondata); 



foreach ($usuariosArray as $usuario) { 
    $jsondata = json_decode($usuario.PHP_EOL, true); 
     $jsonarray[] = array($jsondata); 
    } 
} 

變爲:

$jsonarray = json_decode($jsondata, true); 

現在你可以遍歷數組(請注意[0]指數已被刪除):

foreach ($jsonarray as $row) { 
    $nombre = $row['nombre']; 
    $apellido = $row['apellido']; 
    $pass = $row['pass']; 
    $mail = $row['mail']; 
    $sexo = $row['sexo']; 
    $id = $row['id']; 
    $nacimiento = $row['nacimiento']; 
} 

2)更換與爆炸正則表達式

如果你不能修復你的JSON文件的格式,explode()需要被替換,因爲它當前每個行都會爆炸JSON文件(您正在使用行尾字符作爲分隔符)。

隨着使用preg_match_all你可以從你的無效JSON文件中的每個對象,使用complex (and not bulletproof) regex pattern

$pattern = ' 
/
\{    # { character 
    (?:   # non-capturing group 
     [^{}] # anything that is not a { or } 
     |  # OR 
     (?R) # recurses the entire pattern 
    )*   # previous group zero or more times 
\}    # } character 
/x 
'; 

preg_match_all($pattern, $jsondata, $matches); 

現在可以遍歷您$matches,並將其作爲JSON解碼:

foreach ($matches[0] as $match) { 
    $jsonarray[] = json_decode($match, true); 
} 

的最後一步和上面一樣。

+0

我改變了你說的一切,但仍然沒有將它插入到表中... –