Как я могу использовать php, чтобы пройти через этот json и добавить элементы внутри него в базу данных mysqli? - PullRequest
1 голос
/ 26 марта 2019

Я пытаюсь разрешить пользователю Android заменить таблицу базы данных.Мое приложение читает электронную таблицу Excel с телефона, добавляет каждую строку в json, а затем сериализует json, чтобы получить строку:

[{"name":"catheter","alts":"cathater, cathiter, cath","num":"134"}, 
{"name":"cast","alts":"","num":"2212"}]

Затем мое приложение отправляет сериализованный json в файл php на моемсервер, на котором я

var_dump(json_decode($serializedString));

, чтобы добраться до рассматриваемого массива:

array(2) {  [0]=>  object(stdClass)#2 (4) {    ["name"]=>    string(8) 
"catheter"    ["alts"]=>    string(24) "cathater, cathiter, cath"    
["num"]=>    string(3) "134"    }  [1]=>  object(stdClass)#3 (4) {    
["name"]=>    string(4) "cast"    ["alts"]=>    string(0) ""    
["number"]=>    string(0) ""    }}

Я глупый php, но я пробовал кучу вещей.Это скажет мне, сколько элементов в массиве:

$count = 0;
$something = json_decode($serializedJsonString, true);
foreach($something as $obj){
    $count = $count+1;
}
echo $count;

Мне действительно нужно иметь возможность ссылаться на пары ключ-значение каждого элемента, чтобы я мог добавить их в базу данных, в которой есть столбцы для имени, alt_names и номер.Спасибо за связку.

Ответы [ 3 ]

2 голосов
/ 26 марта 2019

Может быть, это может вам помочь:

$serializedString= '[{"name":"catheter","alts":"cathater, cathiter, cath","num":"134"}, 
{"name":"cast","alts":"","num":"2212"}]';

$res = json_decode($serializedString, true);

функция для данных isert (вызовите ее во время цикла массива)

function insert($element , $mysqli){
    if(isset($element['name']) && isset($element['alts']) && isset($element['num'])){
     $stmt = $mysqli->prepare("INSERT INTO myTable (name, alt_names,number ) VALUES (?, ?, ?)");
     $stmt->bind_param($element['name'], $element['alts'],$element['num']);
     $stmt->execute();
     $stmt->close();
   }

}

ваш основной скрипт:

$host = 'insert here the host';
$db = 'name of your database';
$username= 'db username';
$password = 'password db';


 // create database connection
 $mysqli = new mysqli($host, $username, $password, $db);
 $mysqli->set_charset("utf8mb4");
 $mysqli->autocommit(FALSE); // manage transaction

foreach($res as $key => $value){
   insert($value,$mysqli);
}
$mysqli->commit();
1 голос
/ 26 марта 2019

Вы можете сделать что-то вроде этого:

$db = new MySQLi(HOST, USER, PASS, SCHEMA, PORT);

$count = 0;
$elems = json_decode($serializedJsonString, true);

$stmt = $db->prepare('INSERT INTO items (name, alt_names, number) VALUES (?,?,?)');

$db->begin_transaction();
foreach($elems as $elem){
    $stmt->bind_param("ssi", $elem['name'], $elem['alts'], $elem['num']);
    $stmt->execute();
    $count = $count+1;
}

$stmt->close();
$db->commit();
$db->close();
echo $count;

Это также безопасно против любых SQL-инъекций .И я предположил, что местоположение и идентификатор обнуляются и недоступны на момент этой операции.

1 голос
/ 26 марта 2019
$count = 0;
$something = json_decode($serializedJsonString, true);
foreach($arr as $item){
    $name = $item["name"];
    $alts = $item["alts"];
    $num = $item["num"];
//make insert query here.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...