У меня есть 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. "')"; }
Меньше кода – тот же результат.