2017-11-08 13 views
0

多くの例では、JSONを解析し、それぞれのフィールドをMySQLテーブルに挿入します。jsonオブジェクトをmysqlテーブルに挿入する方法

私のケースは、実行時にjsonを作成する方法とは異なります。

私のテーブルには、次のようになります。受信した入力に基づいて

mysql> describe turkers_data; 
+-----------+----------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+-----------+----------+------+-----+---------+-------+ 
| id  | char(36) | NO | PRI | NULL |  | 
| sentences | json  | NO |  | NULL |  | 
+-----------+----------+------+-----+---------+-------+ 
2 rows in set (0.00 sec) 

、私はalredy jsonlintで検証し、それはもちろん有効であるphpjson_encode方法を使用してjsonを構築します。

例のJSON:

{ 
    "opening": "[\"John arrived at Sally's house to pick her up.\",\"John and Sally were going to a fancy restaurant that evening for a dinner.\",\"John was little nervous because he was going to ask Sally to marry him.\"]", 
    "first_part": "[\"aa\",\"bb\"]", 
    "first_mid": "[\"Waiter shows John and Sally to their table.\"]", 
    "mid_part": "[\"cc\",\"dd\"]", 
    "mid_late": "[\"John asks Sally, \\\"Will you marry me?\\\"\"]", 
    "last_part": "[\"ee\",\"ff\",\"gg\"]" 
} 

私はmysqliの

$opening = array("John arrived at Sally's house to pick her up.", "John and Sally were going to a fancy restaurant that evening for a dinner.", "John was little nervous because he was going to ask Sally to marry him."); 
$mid_early = array("Waiter shows John and Sally to their table."); 
$mid_late = array('John asks Sally, "Will you marry me?"'); 
$json_data->opening = json_encode($opening); 
$json_data->first_part = json_encode($jSentence_1); 
$json_data->first_mid = json_encode($mid_early); 
$json_data->mid_part = json_encode($jSentence_2); 
$json_data->mid_late = json_encode($mid_late); 
$json_data->last_part = json_encode($jSentence_3); 

$data = json_encode($json_data); 
echo($data); 


$sql = "INSERT INTO turkers_data (id, sentences) 
VALUES ($id, $data)"; 

if ($conn->query($sql) === TRUE) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 

$conn->close(); 

を使用してMySQLのテーブルに挿入するには、次のコードを使用しますが、それは動作しません、私はエラーを取得:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"opening":"[\"John arrived at Sally's house to pick her up.\",\"John and Sally w' at line 2 

私は何が間違っているのか分からない。私はこれを行う方法に関する多くの情報を見つけることができませんでしたが、jsonのデータをそのままmysqlテーブルにダンプすることはお勧めしませんが、私の場合は何個の文がそこに行くのか不明です。また、これは当面の目的であると私は信じています。JSONmysqlから返信し、pythonにデータを処理する予定です。

jsonJSONMySQLmysql、私はまだ標準を知らない。あなたがこれを持っているので

答えて

1

はあなたのSQLの挿入に問題がある:あり$data上の引用符のないエスケープはありません、と$dataは、いずれかの単一引用符で囲まれていない

$sql = "INSERT INTO turkers_data (id, sentences) VALUES ($id, $data)"; 

あなたはプリペアドステートメントとしてこれを構築し、あなたのためにすべてのことを行いますのparamsバインドする必要があります。上記の

$sql = "INSERT INTO turkers_data (id, sentences) VALUES (?,?)"; 
$stmt = $conn->prepare($sql); 
$stmt->bind_param('ss', $id, $data); 
$stmt->execute(); 

あなたはPDO mysqliのを使用して、されておらず、想定しています。

$sql = "INSERT INTO turkers_data (id, sentences) VALUES (?,?)"; 
$stmt = $conn->prepare($sql); 
$stmt->execute(array($id, $data)); 

EDIT

土壇場の努力(AND無分別)あなたのPHPとMySQLは、プリペアドステートメントをサポートしていない場合、(それが必要!):そのPDO場合、これはPDOメソッドの構文は次のとおりです。 、あなたはラッピングの古い方法に頼るとSQLビルド文字列で、あなたのフィールドをエスケープすることができます

$sql = "INSERT INTO turkers_data (id, sentences) 
     VALUES (
       '". $conn->real_escape_string($id) ."', 
       '". $conn->real_escape_string($data) ."' 
       )"; 

しかし、これはお勧めできません!すべての費用がの場合は、の準備文を取得するか、PHPまたはmysqli拡張機能をアップグレードしてください。

+0

ありがとうございました。私はそれがPDOだと思う、私はここw3schoolsからのチュートリアルに従っている:https://www.w3schools.com/php/php_mysql_insert.asp私があなたの提案にあなたのコードを変更した場合、私はエラーが発生します:エラー:INSERT INTO turkers_data( id、sentences)VALUES(?、?) SQL構文に誤りがあります。 '?、?)' 1行目で使用するようにMySQLサーバのバージョンに対応するマニュアルを確認してください。 – Adorn

+0

これは、あなたが標準の 'mysql'メソッドを使っていると思うようにします(' mysqli'ではなく、 'i ')...?あなたは確認できますか? – IncredibleHat

+1

'$ conn = new mysqli($ servername、$ username、$ password、$ dbname);'それは確かに 'mysqli'です – Adorn

関連する問題