連日の質問失礼いたします。
Pythonで作成したJSON配列をPOST通信でPHPへ送信、
PHPでJSON配列をデコードし、取り出した連想配列をMySQLへINSERTしたく思い、
下記コードを作成致しました。
Python
1import csv 2import requests 3import json 4import hashlib 5import hmac 6import base64 7 8# リクエスト先PHP 9API_Endpoint = 'http://localhost:8888/------/logs_insert.php' 10 11 12body = { 13 "data" : [ 14 { 15 'user_id': '0001', 16 'ins_id': 'green_green_greeeeen', 17 'ha_tag': '国分寺', 18 'tar_id': 'cobo.cobo.sucrier', 19 'li_at': '2021-05-11 00:25:46', 20 'pos_at': '2021-05-10T15:17:03.000Z' 21 }, 22 { 23 'user_id': 'AAAAA', 24 'ins_id': 'green_green_greeeeen', 25 'ha_tag': '国分寺', 26 'tar_id': 'kimagure_took', 27 'li_at': '2021-05-11 00:26:04', 28 'pos_at': '2021-05-10T14:53:51.000Z' 29 }, 30 { 31 'user_id': 'AAAAA', 32 'ins_id': 'green_green_greeeeen', 33 'ha_tag': '国分寺', 34 'tar_id': 'm710ys', 35 'li_at': '2021-05-11 00:26:19', 36 'pos_at': '2021-05-10T14:47:33.000Z' 37 } 38 ] 39 } 40 41json_body = json.dumps(body) 42custom_header = {'Content-Type': 'application/x-www-form-urlencoded', 43 'X-Signature' : xxxxxxxx} 44 45# API接続 46result = requests.post(API_Endpoint,data=json_body,headers=custom_header) 47print( "status:", result.status_code ) 48 49print(result) 50print(result.text)
↓Pythonから受け取るPHPです。
PHP
1<?php 2require_once('function.php'); 3$dbh = dbConnect(); 4 5$logs = json_decode(file_get_contents('php://input'),true); 6 7foreach($logs as $log){ 8 foreach($log as $values){ 9 foreach($values as $value){ 10 try { 11 $stmt = $dbh->prepare("INSERT INTO like_logs(user_id,ins_id,ha_tag,tar_id,li_at,pos_at) values (?,?,?,?,?,?)"); 12 $stmt->execute($value); 13 $dbh->commit(); 14 echo '送信成功'; 15 16 } catch(PDOException $e){ 17 echo '送信失敗'. $e->getMessage(); 18 exit(); 19 }; 20 } 21 } 22} 23?>
下記エラー文が出ます。
error
1There is no active transaction
MySQLのテーブル情報は以下です。
①id int(191) AUTO_INCREMENT
②user_id varchar(191)
③ins_id varchar(191)
④ha_tag varchar(191)
⑤tar_id varchar(191)
⑥li_at datetime(6)
⑦pos_at datetime(6)
⑧created_at timestamp(6)
$valueをvar_dampしてみてデータの数を数えても、SQL命令文内のデータの数と一致しているのにエラーが出ます。
他にコード内で悪い箇所があるのでしょうか。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/12 04:26
2021/05/12 04:30
2021/05/12 04:59