¿Cómo insertar array en tabla de MySQL con PHP?

Necesito migrar un archivo JSON que tiene los datos de mis users a una tabla de MySQL con PHP, ya hice la conexión, con la base de datos pude crear la tabla y pude decodificar el JSON a un array. Lo que no puedo hacer es insertar los datos del array a la tabla de usuarios en MySQL.

Mi JSON se ve algo así:

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

Así llegué a los valores de cada user:

$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'];
}

Ahora quiero insertarlos en una tabla que ya tengo creada en MySQL y no sabría cómo hacerlo...

Intenté con esto, pero no se insertan.

$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,
  ]
);
5
задан 06.11.2016, 03:03
3 ответа

в конце концов измените способ вводить их с помощью тех, которые ответили мне, и я это смог создавать так

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "dh_usuarios";
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$jsondata = file_get_contents('../usuarios.json');
$jsonarray = json_decode($jsondata, true);


foreach ($jsonarray as $row) {
    $id = $row['id'];
    $nombre = $row['nombre'];
    $apellido = $row['apellido'];
    $mail = $row['mail'];
    $pass = $row['pass'];
    $sexo = $row['sexo'];
    $nacimiento = $row['nacimiento'];
    $sql = "INSERT INTO usuarios (id, nombre, apellido, email, pass, sexo, nacimiento)
        VALUES($id, '$nombre', '$apellido', '$mail', '$pass', '$sexo', '$nacimiento')";
        $conn->query($sql);
 }
if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
1
ответ дан 24.11.2019, 12:43

Пробуй с этим:

    [// <-- Agregar este tag al inicio
    {
      "nombre":"asudhau",
      "apellido":"uhsaudhau",
      "pass":"$2y$10$KAg3wt7bBjphgdCNJf4VXe.an8lOnlOvWVdVsh2Qsws0dbhWiDwkO",
      "mail":"usaudha@hotmail.com",
      "sexo":"F",
      "id":34,
      "nacimiento":"2016-10-06"
     },
     {
      "nombre":"abudasd",
      "apellido":"hasdua",
     "pass":"$2y$10$c781KdL3ERgDCnP6MR28xuf\/dnKjuVajklc0uSj2FnBrZSB1H88Si",
     "mail":"uhasiuda@hotmail.com",
     "sexo":"F",
     "id":35,
     "nacimiento":"1990-02-03"
     },
     {
     "nombre":"audihaiudh",
     "apellido":"uiahsdiuahdi",
     "pass":"$2y$10$Q7VjafKxt\/kuJS1BrslF0uSZPwHe7Hvp6olMxetgY31KcmMT9dIo2",
     "mail":"hiuahdiuah@hotmail.com",
     "sexo":"F",
     "id":36,
     "nacimiento":"1999-02-03"
     }
     ]// <-- Agregar este tag al final

Потом в PHP:

    $conn = new   
     PDO('mysql:host=localhost;dbname=dh_usuarios;charset=UTF8mb4', 'root',             

     '');
    $jsondata = file_get_contents('../usuarios.json');
    $usuariosArray = json_decode($jsondata, true);


  foreach ($usuariosArray as $row) {

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

  $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
                 ]);
    }
2
ответ дан 24.11.2019, 12:43

Как кажется, доступ и inserciГіn на базу данных дается despuГ©s, переменные nombre, apellido , email etc пробегают цикл следовательно. у них нет стоимости, deberГ, - чтобы размещать процесс внутри foreach, adempas podrГ, - чтобы использовать bind, чтобы перемещать данные, подобранные array

$jsondata = file_get_contents('file.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'];
  $data = array('nombre'=> $nombre, 'apellido'=> $apellido, 'password'=> $pass, 'mail'=> $mail,'sexo'=> $sexo, 'id'=> $id, 'nacimiento'=> $nacimiento);
  $stmt = $conn->prepare('INSERT INTO dh_usuarios
  (nombre, apellido, pass, mail, sexo, id, nacimiento) VALUES
  (:nombre, :apellido, :password, :sexo, :id, :nacimiento)');
  $stmt->execute($data);
}
0
ответ дан 24.11.2019, 12:43
  • 1
    спасибо за подсказку, но останься, не будучи введен в таблицу..., не, если я буду писать плохо часть stmt, или если ты оценил их, они не работают добро и не записываются...: (я пытаюсь с fetch, но не, если я это пишу хорошо.... T_T – Shiori Naka 06.11.2016, 03:11
  • 2
    Actualiz и # 233; мой ответ надеялся, что он помогает ему. не сомневайтесь в том, чтобы спрашивать, если у него есть какое-то сомнение. – DarkFenix 06.11.2016, 03:52
  • 3
    сейчас он бросает мне ошибку: Фатальная ошибка: Call to undefined method PDOStatement:: bind_param () – Shiori Naka 06.11.2016, 04:07
  • 4
    Моя ошибка, пытаться с actualizaci и # 243; n. – DarkFenix 06.11.2016, 04:34
  • 5
    @MarcosGallardo - Пожалуйста не пробуй исправления ответа таким образом: Этот edici и # 243; n он отдаляется intenci и # 243; n оригинал publicaci и # 243; n. Даже те редактирования, которые подразумевают большие изменения, должны стараться, чтобы предохранять цели владельца publicaci и # 243; n. – Black Sheep 06.11.2016, 05:18

Valida que los tipos de datos que intetes insertar Sean Los Que Estén Permitidos en Los Campo.

Es decir, puede que en el json este un email de 15 caracteres y la base de data solo allowa solo 10, или queue pass solo allowa datos enteros y le estes pasado un string , eso suele pasar muy seguido

валид эль типо де дато, в продольном направлении и без пермита campos nullos.

Общие сведения об ошибке capa 8 y supongo que no se muestra ningún error de referencia

0
ответ дан 03.12.2019, 19:18

Теги

Похожие вопросы