Нули, вставляемые в базу данных MySQL по ошибке

#php #mysql #json

#php #mysql #json

Вопрос:

Я пытаюсь запустить простой PHP-код, который извлекает файл в формате JSON и вставляет в базу данных.

Код возвращает, что новая запись была создана успешно. Однако, когда я смотрю на базу данных, каждое значение равно 0.

 //read the json file contents
$jsondata = file_get_contents('http://tally.fit/empdetails.json');

//convert json object to php associative array
$data = json_decode($jsondata, true);

//get the employee details
$id = $data['empid'];
$name = $data['personal']['name'];
$gender = $data['personal']['gender'];
$age = $data['personal']['age'];
$streetaddress = $data['personal']['address']['streetaddress'];
$city = $data['personal']['address']['city'];
$state = $data['personal']['address']['state'];
$postalcode = $data['personal']['address']['postalcode'];
$designation = $data['profile']['designation'];
$department = $data['profile']['department'];

//insert into mysql table
$sql = "INSERT INTO tbl_emp(empid, empname, gender, age, streetaddress, city, state, postalcode, designation, department)
VALUES('$id', '$name', '$gender', '$age', '$streetaddress', '$city', '$state', '$postalcode', '$designation', '$department')";
 

JSON:

 {
    "emp": "SJ011MS",
    "personal": {
        "name": "Smith Jones",
        "gender": "male",
        "age": "28",
        "address": {
            "streetaddress": "7 24th Street",
            "city": "new york",
            "state": "NY",
            "postalcode": "10038"
        }
    },
    "profile": {
        "designation": "Deputy General",
        "department": "Finance"
    }
}
 

Комментарии:

1. Вы пытались echo $id; посмотреть, что содержится в переменных? Дает ли это значение null или фактический идентификатор? Это может помочь вам в отладке.

2. Если ничего другого — ваш JSON имеет emp для идентификатора сотрудника, и вы используете empid

3. Вы уязвимы для атак с использованием SQL-инъекций .

4. Я исправил JSON, затем добавил echo, и я могу видеть, что каждое значение проходит просто отлично.. Что сейчас странно, так это то, что в БД обновляются не все поля, а только некоторые

Ответ №1:

Ваш JSON недопустим. Смотрите ниже.

 "profile":{
            "designation":"Deputy General",
            "department":"Finance", //Remove Comma here for valid JSON
            }
 

Вы можете проверить это в будущем, используя var_dump() on your json_decode() , а затем проверить свою строку JSON с помощью инструмента проверки JSON.

Ответ №2:

Эта строка JSON, возвращаемая сервером, недопустима. Невозможно проанализировать с помощью json_decode.