Я пытаюсь прочитать JSON, полученный из API. Я хочу взять эти данные и автоматически создать таблицу и столбцы, необходимые для хранения полученной информации. Я не хочу создавать столбцы статически, потому что каждая монета, которую я запускаю, может содержать больше или меньше информации.
Мой код ниже в настоящее время будет создавать только 3 столбца (идентификатор, имя и тикеры) и вставлять данные в идентификатор и имя.
Он не пройдет через первый массив информации.
Во-вторыхЯ получаю сообщение об ошибке '$qi .= "'" . mysqli_real_escape_string($conn, $value) . "',";'
Warning: mysqli_real_escape_string() expects parameter 2 to be string, array given
, которое не знаю, как исправить.
Исходный код
$apiurl = "https://api.coingecko.com/api/v3/coins/infocoin/tickers";
$json = file_get_contents($apiurl);
JSON_to_table($json);
function JSON_to_table($json, $tblName = "New_JSON_table_"){
$conn = mysqli_connect($GLOBALS["db"]["host"], $GLOBALS["db"]["user"], $GLOBALS["db"]["pass"], $GLOBALS["db"]["name"]);
$j_obj = json_decode($json, true);
//$j_obj2 = $j_obj["tickers"];
//var_dump($j_obj);
print_r ($j_obj);
if(!mysqli_num_rows( mysqli_query($conn,"SHOW TABLES LIKE '" . $tblName . "'"))){
$cq = "CREATE TABLE ". $tblName ." (
id1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,";
foreach($j_obj as $j_arr_key => $value){
$cq .= $j_arr_key . " VARCHAR(256),";
}
$cq = substr_replace($cq,"",-1);
$cq .= ")";
mysqli_query($conn,$cq) or die(mysqli_error($conn));
}
$qi = "REPLACE INTO $tblName (";
reset($j_obj);
foreach($j_obj as $j_arr_key => $value){
$qi .= $j_arr_key . ",";
}
$qi = substr_replace($qi,"",-1);
$qi .= ") VALUES (";
next($j_obj);
foreach($j_obj as $j_arr_key => $value){
$qi .= "'" . mysqli_real_escape_string($conn, $value) . "',";
$qi .= "'" .$value . "',";
}
$qi = substr_replace($qi,"",-1);
$qi .= ")";
$result = mysqli_query($conn,$qi) or die(mysqli_error($conn));
return true;
Код, который выдает повторяющееся имя столбца: ошибка
$apiurl = "https://api.coingecko.com/api/v3/coins/infocoin/tickers";
$json = file_get_contents($apiurl);
JSON_to_table($json);
function JSON_to_table($json, $tblName = "New_JSON_table_"){
$conn = mysqli_connect($GLOBALS["db"]["host"], $GLOBALS["db"]["user"], $GLOBALS["db"]["pass"], $GLOBALS["db"]["name"]);
$j_obj = json_decode($json, true);
//$j_obj2 = $j_obj["tickers"];
//var_dump($j_obj);
print_r ($j_obj);
if(!mysqli_num_rows( mysqli_query($conn,"SHOW TABLES LIKE '" . $tblName . "'"))){
$cq = "CREATE TABLE ". $tblName ." (
id1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,";
foreach($j_obj as $j_arr_key => $value){
$cq .= $j_arr_key . " VARCHAR(256),";
}
next($j_obj);
foreach($j_obj as $j_arr_key => $value){
$cq .= $j_arr_key . " VARCHAR(256),";
}
$cq = substr_replace($cq,"",-1);
$cq .= ")";
mysqli_query($conn,$cq) or die(mysqli_error($conn));
}
$qi = "REPLACE INTO $tblName (";
reset($j_obj);
foreach($j_obj as $j_arr_key => $value){
$qi .= $j_arr_key . ",";
}
$qi = substr_replace($qi,"",-1);
$qi .= ") VALUES (";
next($j_obj);
foreach($j_obj as $j_arr_key => $value){
$qi .= "'" . mysqli_real_escape_string($conn, $value) . "',";
$qi .= "'" .$value . "',";
}
$qi = substr_replace($qi,"",-1);
$qi .= ")";
$result = mysqli_query($conn,$qi) or die(mysqli_error($conn));
return true;
Я изменил код несколькими способами. Я наконец-то сделал так, чтобы он вставлял все данные из второго массива в столбец «тикеры», но я этого не хочу. Я получил код почти для добавления оставшихся имен столбцов, но затем он дает мне ошибку Duplicate column name 'name'
Отредактированный код из комментариев ниже
$apiurl = "https://api.coingecko.com/api/v3/coins/infocoin/tickers";
$json = file_get_contents($apiurl);
JSON_to_table($json);
function JSON_to_table($json, $tblName = "New_JSON_table_"){
$conn = mysqli_connect($GLOBALS["db"]["host"], $GLOBALS["db"]["user"], $GLOBALS["db"]["pass"], $GLOBALS["db"]["name"]);
$j_obj = json_decode($json, true);
//$j_obj2 = $j_obj["tickers"];
//var_dump($j_obj);
print_r ($j_obj);
if(!mysqli_num_rows( mysqli_query($conn,"SHOW TABLES LIKE '" . $tblName . "'"))){
$cq = "CREATE TABLE ". $tblName ." (
id1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,";
foreach($j_obj["tickers"][0] as $j_arr_key => $value){
$cq .= $j_arr_key . " VARCHAR(256),";
}
$cq = substr_replace($cq,"",-1);
$cq .= ")";
mysqli_query($conn,$cq) or die(mysqli_error($conn));
}
$qi = "REPLACE INTO $tblName (";
reset($j_obj["tickers"][0]);
foreach($j_obj["tickers"][0] as $j_arr_key => $value){
$qi .= $j_arr_key . ",";
}
$qi = substr_replace($qi,"",-1);
$qi .= ") VALUES (";
next($j_obj);
foreach($j_obj["tickers"][0] as $j_arr_key => $value){
$qi .= "'" . mysqli_real_escape_string($conn, $value) . "',";
$qi .= "'" .$value . "',";
}
$qi = substr_replace($qi,"",-1);
$qi .= ")";
$result = mysqli_query($conn,$qi) or die(mysqli_error($conn));
return true;
Ошибки из обновленного кода
Warning: mysqli_real_escape_string() expects parameter 2 to be string, array given in /var/www/html/exp/coingecko_testmarket.php on line 86
Notice: Array to string conversion in /var/www/html/exp/coingecko_testmarket.php on line 87
Warning: mysqli_real_escape_string() expects parameter 2 to be string, array given in /var/www/html/exp/coingecko_testmarket.php on line 86
Notice: Array to string conversion in /var/www/html/exp/coingecko_testmarket.php on line 87
Warning: mysqli_real_escape_string() expects parameter 2 to be string, array given in /var/www/html/exp/coingecko_testmarket.php on line 86
Notice: Array to string conversion in /var/www/html/exp/coingecko_testmarket.php on line 87
Column count doesn't match value count at row 1