2016-11-06 111 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

我改变了你说的一切,但仍然没有将它插入到表中... –