2016-11-06 19 views
0

ユーザーデータを持つJSONファイルをPHPのMySQLのテーブルに移行する必要があります。すでにDBと接続していました。テーブルを作成してJSONを配列にデコードしました。私ができないことは、配列データをMySQL Usersテーブルに挿入することです。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

DBからエラーをチェックしましたか? – Machavity

+0

私はデータベースからのエラーではないようですが、私はどこかで間違いを犯したと思いますが、私はそれを理解できません.... –

+0

あなたに何かあるかどうかチェックするために 'var_dump($ jsondata)'を試してみてください。 –

答えて

1

コードを修正するには2通りの方法があります。

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を使用して、あなたがcomplex (and not bulletproof) regex patternを使用して、あなたの無効なJSONファイルから各オブジェクトを取得することができ

$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

私はあなたが言うようにすべてを変えますが、それでもテーブルにそれを挿入しません... –

関連する問題