Intereting Posts
c ++ php и статическая библиотека Представление JQuery / Ajax (enctype = "multipart / form-data"). Почему «contentType: False» вызывает неопределенный индекс в PHP? Значения wp_posts.id более 9 цифр вызывают проблемы с сообщениями и разрешениями Как выйти из системы и переадресовать ее на страницу входа в систему с помощью Laravel 5.3? Facebook iframe не работает в IE; проблема сеанса / входа? Выберите свободные номера между двумя датами Что является лучшим prctice для использования безопасности в JAX-WS Обновите страницу PHP для каждой предопределенной секунды. Как найти, какой PHP-скрипт утечка памяти? Symfony2 REST API – частичное обновление Может ли PHP «писать» или «копировать» на удаленном удаленном ресурсе, но не «отключать» или «переименовывать» («Доступ запрещен») PHP: если нет имени Выделить текущую страницу на DYnamic Navigation PHP размещение html-содержимого между php-функцией Как я могу вызвать PHP-функции JavaScript?

вставлять данные из JSON в mysql, используя php

У меня есть JSON, который я хотел бы вставить в базу данных mysql. Мой JSON

{"users": { "bert":6.44, "earnie":0.25, "bigbird":34.45 }} 

У меня есть таблица в mysql, называемая «USERSAMOUNTS» с двумя coloumns.

Столбцы называются «USERNAME» и «AMOUNT».

Я пытаюсь вставить каждое имя в столбец USERNAME и каждую сумму в столбец AMOUNT в одном запросе с использованием цикла foreach и implode. Код, который я использую, выглядит следующим образом ….

 $array = json_decode($data, true); $keys = array_keys($array); // get the value of keys $rows = array(); // create a temporary storage for rows foreach($keys as $key) { // loop through $value = $array[$key]; // get corresponding value $rows[] = "('" . $key . "', '" . $value . "')"; // add a row to the temporary storage } $values = implode(",", $rows); // 'glue' your rows into a query $hostname = 'localhost'; // write the rest of your query $username = 'usersname'; $password = 'userspassword'; try { $dbh = new PDO("mysql:host=$hostname;dbname=my_database", $username, $password); echo 'Connected to database<br />'; // echo a message saying we have connected $count = $dbh->exec("INSERT INTO USERAMOUNTS(USERNAME, AMOUNT) VALUES ($values)"); echo $count;// echo the number of affected rows $dbh = null;// close the database connection } catch(PDOException $e) { echo $e->getMessage(); } 

…. моя проблема в том, что когда я запускаю код, все, что я получаю, это сообщение Connected to database для подтверждения Connected to database данных. Никакие записи не вставлены и сообщения об ошибках не отображаются. Может ли кто-нибудь здесь указать, где я ошибаюсь и, возможно, дать мне подсказку о том, как исправить код?

Измените свой код:

 $array = json_decode($data, true); $rows = array(); foreach($array['users'] as $key => $value) $rows[] = "('" . $key . "', '" . $value . "')"; $values = implode(",", $rows); 

У вас есть проблема в начале вашего кода:

 $array = json_decode($data, true); $keys = array_keys($array); // get the value of keys $rows = array(); // create a temporary storage for rows foreach($keys as $key) { // loop through $value = $array[$key]; // get corresponding value $rows[] = "('" . $key . "', '" . $value . "')"; // add a row to the temporary storage } 

$array – это многомерный массив, состоящий только из одного элемента с ключом для users , поэтому вы не зацикливаете свои данные, а поверх внешнего массива. Если вы включите отображение ошибок, вы увидите предупреждение: PHP Notice: Array to string conversion в строке:

 $rows[] = "('" . $key . "', '" . $value . "')"; 

Вам нужно зациклиться на содержимом вашего users :

 foreach ($array['users'] as $key => $value) { ... 

Вам не нужны скобки вставки

 $count = $dbh->exec("INSERT INTO USERAMOUNTS(USERNAME, AMOUNT) VALUES " . $values); 

Первоначальная проблема заключается в том, что ваш массив не $ array, а $ array ["users"].

Сделайте следующее. Заменить все это

 $keys = array_keys($array); // get the value of keys $rows = array(); // create a temporary storage for rows foreach($keys as $key) { // loop through $value = $array[$key]; // get corresponding value $rows[] = "('" . $key . "', '" . $value . "')"; // add a row to the temporary storage } $values = implode(",", $rows); // 'glue' your rows into a query 

со следующим:

 $values = Array(); foreach($array["users"] as $user=>$amount) { $values[] = "('" . $user. "', '" . $amount. "')"; } 

Меньше кода – тот же результат.