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,
]
);
в конце концов измените способ вводить их с помощью тех, которые ответили мне, и я это смог создавать так
$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();
Пробуй с этим:
[// <-- 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
]);
}
Как кажется, доступ и 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);
}
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