Error saving json data in MySQL

2

I'm trying to store this data JSON :

{
    "ticker": {
        "base": "ETH",
        "target": "USD",
        "price": "689.18009232",
        "volume": "234831.85174911",
        "change": "1.48138601"
    },
    "timestamp": 1525308422,
    "success": true,
    "error": ""
}

In my Database and when executing PHP I get these errors:

  

PHP Notice: Undefined index: ticker in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23

     

Notice: Undefined index: ticker in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23 PHP Notice:   Undefined index: ticker in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23

     

Notice: Undefined index: ticker in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23 PHP   Warning: Illegal string offset 'ticker' in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23

     

Warning: Illegal string offset 'ticker' in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23 PHP Notice:   Uninitialized string offset: 0 in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23

     

Notice: Uninitialized string offset: 0 in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23 PHP   Warning: Illegal string offset 'base' in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23

     

Warning: Illegal string offset 'base' in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23 PHP Notice:   Uninitialized string offset: 0 in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23

     

Notice: Uninitialized string offset: 0 in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23 PHP   Warning: Illegal string offset 'ticker' in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23

     

Warning: Illegal string offset 'ticker' in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23 PHP Notice:   Uninitialized string offset: 0 in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23

     

Notice: Uninitialized string offset: 0 in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23 PHP   Warning: Illegal string offset 'volume' in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23

     

Warning: Illegal string offset 'volume' in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23 PHP Notice:   Uninitialized string offset: 0 in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23

     

Notice: Uninitialized string offset: 0 in   C: \ xampp \ htdocs \ crypto4allfinal \ jsonToMySQL.php on line 23

Next I leave the code PHP :

<?php

/*$bucle=true;
do {*/

    $json = file_get_contents('datosCriptomonedas.json');
    $datosclientes = json_decode($json, true);

    $server = "localhost";
    $user = "root";
    $pass = "";
    $bd = "crypto4all";

    //Creamos la conexión
    $conexion = mysqli_connect($server, $user, $pass,$bd) 
    or die("Ha sucedido un error inexperado en la conexion de la base de datos");

    //var_dump($cliente);

    foreach ($datosclientes as $cliente) {

        mysqli_query($conexion,"INSERT INTO criptomoneda (nombre,volumen) 
        VALUES ('".$cliente['ticker']['base']."',".$cliente['ticker']['volume'].")");
    }   

    mysqli_close($conexion);
/*
    sleep(60);//1 minuto
} while ($bucle);*/

?>

The result of the variable is as follows:

Array
(
    [ticker] => Array
        (
            [base] => ETH
            [target] => USD
            [price] => 689.18009232
            [volume] => 234831.85174911
            [change] => 1.48138601
        )

    [timestamp] => 1525308422
    [success] => 1
    [error] => 
)
    
asked by charli 03.05.2018 в 17:18
source

1 answer

3

In this loop you are iterating over the indexes of $datoscliente

foreach ($datosclientes as $cliente) {

    mysqli_query($conexion,"INSERT INTO criptomoneda (nombre,volumen) 
    VALUES ('".$cliente['ticker']['base']."',".$cliente['ticker']['volume'].")");
}

What you should do is access the original array directly and do not use foreach

mysqli_query($conexion,"INSERT INTO criptomoneda (nombre,volumen) 
VALUES ('".$datoscliente['ticker']['base']."',".$datoscliente['ticker']['volume'].")");

By the way, you are exposed to a serious security problem called SQL Injection , you can see here how to avoid it: How to avoid SQL injection in PHP?

    
answered by 03.05.2018 / 17:54
source