実現したいこと
node.js使用して、web3.eth.getBlockで取得したデータをmysqlに書き込みたいです。
発生している問題
mysqlへの書き込みが上手くいきません。
コード
Javascript
1let mysql = require('mysql'); 2const Web3 = require('web3'); 3 4const web3 = new Web3("http://localhost:8545"); 5 6const mysqlConnect = mysql.createConnection({ 7 host: 'localhost', 8 user: 'webstorm', 9 password: '', 10 database: 'blockchain_data', 11}); 12 13let TABLE_NAME = 'eth_blockdata'; 14 15async function geth2db() { 16 17 let i = 9000000; 18 let blockInfo = {}; 19 let block2obj = {}; 20 let transactions_join = ''; 21 22 try { 23 blockInfo = await web3.eth.getBlock(i); 24 25 transactions_join = blockInfo.transactions.join(); 26 27 block2obj = { 28 number: blockInfo.number, 29 difficulty: blockInfo.difficulty, 30 extraData: blockInfo.extraData, 31 gasLimit: blockInfo.gasLimit, 32 gasUsed: blockInfo.gasUsed, 33 hash: blockInfo.hash, 34 logsBloom: blockInfo.logsBloom, 35 miner: blockInfo.miner, 36 mixHash: blockInfo.mixHash, 37 nonce:blockInfo.nonce, 38 parentHash: blockInfo.parentHash, 39 receiptsRoot: blockInfo.redeiptsRoot, 40 sha3Uncles: blockInfo.sha3Uncles, 41 size: blockInfo.size, 42 stateRoot: blockInfo.stateRoot, 43 timestamp: blockInfo.timestamp, 44 totalDifficulty: blockInfo.totalDifficulty, 45 transactions: transactions_join, 46 transactionsRoot: blockInfo.transactionRoot, 47 uncles: blockInfo.uncles, 48 }; 49 50 await mysqlConnect.query('INSERT INTO ' + TABLE_NAME + ' SET ?', block2obj, (err, res) => { 51 if (err) throw err; 52 }); 53 54 console.log(blockInfo); 55 } catch (e) { 56 throw e; 57 } 58 59} 60
###mysqlテーブル構成
+------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------+--------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | number | int(11) | YES | | NULL | | | difficulty | varchar(255) | YES | | NULL | | | extraData | varchar(255) | YES | | NULL | | | gasLimit | int(11) | YES | | NULL | | | gasUsed | int(11) | YES | | NULL | | | hash | varchar(255) | YES | | NULL | | | logsBloom | text | YES | | NULL | | | miner | varchar(255) | YES | | NULL | | | mixHash | varchar(255) | YES | | NULL | | | nonce | varchar(255) | YES | | NULL | | | parentHash | varchar(255) | YES | | NULL | | | receiptsRoot | varchar(255) | YES | | NULL | | | sha3Uncles | varchar(255) | YES | | NULL | | | size | int(11) | YES | | NULL | | | stateRoot | varchar(255) | YES | | NULL | | | timestamp | int(11) | YES | | NULL | | | totalDifficulty | varchar(255) | YES | | NULL | | | transactions | text | YES | | NULL | | | transactionsRoot | varchar(255) | YES | | NULL | | | uncles | varchar(255) | YES | | NULL | | +------------------+--------------+------+-----+---------+-------+
###エラーメッセージ
/Users/user/Documents/WebStorm project/191112/node_modules/mysql/lib/protocol/Parser.js:437 throw err; // Rethrow non-MySQL errors ^ Error: ER_PARSE_ERROR: 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 '' at line 1 at Query.Sequence._packetToError (/Users/user/Documents/WebStorm project/191112/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14) at Query.ErrorPacket (/Users/user/Documents/WebStorm project/191112/node_modules/mysql/lib/protocol/sequences/Query.js:77:18) at Protocol._parsePacket (/Users/user/Documents/WebStorm project/191112/node_modules/mysql/lib/protocol/Protocol.js:291:23) at Parser._parsePacket (/Users/user/Documents/WebStorm project/191112/node_modules/mysql/lib/protocol/Parser.js:433:10) at Parser.write (/Users/user/Documents/WebStorm project/191112/node_modules/mysql/lib/protocol/Parser.js:43:10) at Protocol.write (/Users/user/Documents/WebStorm project/191112/node_modules/mysql/lib/protocol/Protocol.js:38:16) at Socket.<anonymous> (/Users/user/Documents/WebStorm project/191112/node_modules/mysql/lib/Connection.js:91:28) at Socket.<anonymous> (/Users/user/Documents/WebStorm project/191112/node_modules/mysql/lib/Connection.js:525:10) at Socket.emit (events.js:210:5) at addChunk (_stream_readable.js:326:12) -------------------- at Protocol._enqueue (/Users/user/Documents/WebStorm project/191112/node_modules/mysql/lib/protocol/Protocol.js:144:48) at Connection.query (/Users/user/Documents/WebStorm project/191112/node_modules/mysql/lib/Connection.js:201:25) at geth2db (/Users/user/Documents/WebStorm project/191112/sub_app/block2mysql.js:71:28) at processTicksAndRejections (internal/process/task_queues.js:93:5) { code: 'ER_PARSE_ERROR', errno: 1064, sqlMessage: "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 '' at line 1", sqlState: '42000', index: 0, sql: "INSERT INTO eth_blockdata SET `number` = 9000000, `difficulty` = '2573664196528490', `extraData` = '0x7070796520e4b883e5bda9e7a59ee4bb99e9b1bc', `gasLimit` = 9994051, `gasUsed` = 9978336, `hash` = '0x388f34dd94b899f65bbd23006ee93d61434a2f2a57053c9870466d8e142960e3', `logsBloom` = '0x...', `miner` = '0x829BD824B016326A401d083B33D092293333A830', `mixHash` = '0x64e4e7f5fab8b28bb02a24dae67032197b63a7745fb82cb9fbacd5445403e7b4', `nonce` = '0xc0bb87c0203c3709', `parentHash` = '0xdbfa2da5922a4833994af5016b5ccfb2e5a4838fb44329062094912149bd5a72', `receiptsRoot` = NULL, `sha3Uncles` = '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', `size` = 41360, `stateRoot` = '0xd863e5b2ecf3dc0276aefe50762d39659811b1f10c91becee455176244085e72', `timestamp` = 1574706444, `totalDifficulty` = '13014076996386893192616', `transactions` = '0xc2d018922e1d372a8e5cc6c9e11d66ad06dc97e2618061cd33d6ef100d1eca9f,...,0x84eac3162e731088b7276cca885aa916fc5b8c11dfef13b9df2729806bbbaf57', `transactionsRoot` = NULL, `uncles` = " }
試したこと
最初は、web3.eth.getBlockで取得したオブジェクトを、そのままmysqlConnect.queryの引数に指定して書き込もうとしました。しかし、取得データではtransactionsが文字列の配列になっており、2つ目以降の要素の書き込みでエラーが出ました。そこで、joinを使用して配列transactionsを一つの文字列にまとめたところ、上記エラーが出ました。エラーメッセージも'…the right syntax to use near '' at line 1'となっておりエラー箇所がよく分かりませんでした。これ以上、何を試したらいいか分からなくなったので、質問させていただきました。
なお、質問文の文字数制限のため、エラーメッセージのsql:以降は、logsBloomとtransactionsの一部を省略しています。
補足情報
OS:MacOS 10.14.6
IDE:WebStorm 2019.3
ブラウザ:google Chrome Version 78.0.3904.108 (Official Build) (64-bit)
mysql: 2.17.1
web3.js: 2.0.0-alpha.1
node.js: 13.1.0
geth: 1.9.7-stable
以上、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/29 02:41