2012-05-24 4 views
-1

JSON 형식의 데이터가 텍스트 파일에 다음과 같이 있습니다. PHP를 사용하여 mysql에이 데이터를 삽입해야하지만 할 수는 없습니다.어떻게 텍스트 파일의 데이터를 mysql에 삽입 할 수 있습니까?

{"address":"+92 334 6629424","service_center":"Test Sending Sms","id":3,"locked":0,"person":0,"protocol":0,"read":0,"reply_path_present":2,"seen":0,"error_code":0,"status":1,"date":1873326412,"thread_id":1,"type":-1} 

내 PHP 파일에는 다음과 같은 코드가 있습니다.

<?php $source_file = "SMS2012-05-21.txt"; $handle = fopen("SMS2012-05-21.txt", "r"); 
$col_names = implode(",", fgetcsv($handle)); // Getting comma separated list of col name 

$link = mysql_connect('localhost', 'root', ''); 
mysql_select_db("messages"); 
while (($data = fgetcsv($handle)) !== FALSE) { 
$values = ""; 
foreach($data as $key => $value) { 
    if ($key != 0) $values .= ", "; 
    $values .= "'".mysql_escape_string($value)."'"; 
} 
mysql_query('INSERT INTO messages ('.$col_names.') VALUES ('.$values.')'); 
} 
?> 

결과가 없거나 오류가 발생하지 않았습니다. 이 점에 대해 어느 누구라도 저를 도울 수 있습니까?

+2

CSV 데이터가 아닌 JSON 데이터이므로 텍스트 파일에 'json_decode'를 사용해야합니다. – xbonez

답변

0

당신은 JSON 데이터를 조작 할 수 json_decode 기능을 사용해야합니다.

<?php 


    $source_file = "SMS2012-05-21.txt"; 
    $string = file_get_contents($source_file); 
    $json = json_decode($string,true); 

    //DB Conn Handling Stuff 

    $cols = array(); $values = array(); 

    foreach($json as $key=>$value) 
    { 
     array_push($cols,'`' . $key . '`'); 
     if(is_string($value)) 
     { 
     array_push($values,'\''.$value.'\''); 
     } 
     else 
     { 
     array_push ($values, $value); 
     } 
    } 

    $col_name = implode(',',$cols); 
    $col_value = implode(',',$values); 

    $query = 'INSERT INTO messages('.$col_name.') VALUES ('.$col_value.')'; 
    mysql_query($query,$connection) or die(echo mysql_error());  

?> 
+0

이 코드의 응답으로 다음과 같은 오류가 발생합니다. 경고 : array_push()는 매개 변수 1이 16 번째 줄에있는 D : \ wamp \ www \ admin \ admin \ jsondecode2.php에 주어진 배열 인 것으로 간주합니다. Notice : D : \ wamp \ www \ admin \ admin \ jsondecode2.php 21. 어디에서 수정해야하는지 알려주세요. – IMRAN

+0

죄송합니다. 인수 순서대로 array_push에 실수를했습니다. 먼저 배열을 누른 다음 푸시 할 문자열을 찾습니다. 지금 게시글을 편집했습니다. –

+0

이제 다음 오류가 표시됩니다. SQL 구문에 오류가 있습니다. 'read, reply_path_present, seen, error_code, status, date, thread_id, type) 근처에서 사용할 올바른 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인하십시오 VALUES (92 3'in line 1 – IMRAN

0

어쩌면 내가 뭔가를 놓친 것,이 방법으로 그것을 사용해야합니다

<?php $source_file = "SMS2012-05-21.txt"; 
$handle = fopen("SMS2012-05-21.txt", "r"); 
$data = fread($handle, filesize($source_file)); 
$jsonArray = json_decode($data, true); 

$keys = implode(',', array_keys($jsonArray)); 
$values = "'" . implode("','", $jsonArray) . "'"; 

$link = mysql_connect('localhost', 'root', ''); 
mysql_select_db("messages"); 

mysql_query('INSERT INTO messages ('.$keys.') VALUES ('.$values.')'); 
+0

이 코드의 응답에서 다음과 같은 오류가 발생합니다. 경고 : json_decode()는 매개 변수 1이 문자열이고 D : \ wamp \ www \ admin \ admin \ jsondecode2.php의 4 행에있는 리소스가 필요합니다. 경고 : array_keys)는 매개 변수 1이 배열이 될 것으로 예상하고 D : \ wamp \ www \ admin \ jsondecode2.php의 6 행에 다음과 같이 지정합니다. 경고 : implode() [function.implode] : D : \ wamp \ www \ admin \ admin \ jsondecode2.php 6. Plz이 해결책에 대해 최대한 빨리 알려줍니다. – IMRAN

+0

코드를 편집했습니다. 다시 시도하십시오. –

+0

결과를 제공하지 않았습니다. 전에 $ keys와 같은 열 이름으로 메시지 테이블을 만들었습니다. 그러나이 코드는 어떤 오류도 결과도주지 않습니다. – IMRAN

관련 문제