1

sqlite開発データベースにデータを挿入するのに問題があります。

私のアプリには2つのサーバーがあり、1つはブラウザー(ブラウザースクレイパー)をスクレイプし、もう1つはクライアント要求を処理します。これらのそれぞれには、生産と開発があります。

最終的にスクレイピングされたデータを開発クライアントリクエストサーバーに挿入するように開発を設定していますが、挿入を機能させることができません。私はそれがコンテンツを適切にエスケープすることに関連していると思うが、私はこれを理解しようとして数時間グーグルにいる。

これが私のスクレイピングアプリからリモートクライアントアプリへの挿入です

@sql_insert = "INSERT INTO #{@table} (`case_number`, `style_of_case`, `circuit`, `judge`, `location`, `disposition`, `date_filed`, `disposition_date`, `case_type`, 'lead_details', 'charge_details')"

@sql_values = " VALUES (#{self.case_number.to_blob}, #{self.style_of_case.to_blob}, #{self.circuit.to_blob}, #{self.judge.to_blob}, #{self.location.to_blob}, #{self.disposition.to_blob}, #{self.date_filed.to_blob}, #{self.disposition_date.to_blob}, #{self.case_type.to_blob},  #{self.lead_details.to_blob}, #{self.charge_details.to_blob});"

@db = SQLite3::Database::new('E:/Sites/aws/db/development.sqlite3')
@db.execute(@sql_insert + @sql_values + "COMMIT;")

最終的なクエリは次のようになります(かなり醜いです)。私が挿入している最後の2つはyamlです

INSERT INTO lead_to_processes (`case_number`, `style_of_case`, `circuit`, `judge`, `location`, `disposition`, `date_filed`, `disposition_date`, `case_type`, 'lead_details', 'charge_details') VALUES (130025129, 130025129 - CITY, 1st(Jim, Counties), LOVEKAMP, KELLY LAREE, Schuyler, Plea Written, 03/19/2012, 03/19/201, Municipal Ordinance - Traffic,  ---
1-address_line_1: 6150 RICHLAND RD
1-address_line_2: ''
1-city: 'GEORGIA'
1-birth_year: '1955' 
1-is_alive: 1
, ---
1-Description: Not Available }
1-Code: '95220'
);
4

3 に答える 3

3

1999年にはPHPをハッキングしていないので、データベースと通信するために文字列補間を使用するべきではありません。SQLite3::Database#executeプレースホルダーをサポートします。使用してください。execute次のようになります。

@db.execute("insert into #{@table} (case_number, style_of_case, ...) values (?, ?, ...)", [
    self.case_number.to_blob,
    self.style_of_case.to_blob,
    ...
])

そうすれば、データベースインターフェイスがすべての引用符とエスケープなどを処理します。

于 2013-03-26T04:16:07.857 に答える
0

私はRubyやSQLiteに精通していませんが、純粋にクエリを見ると、最後の2つの列名が一重引用符で誤って引用されています。他の列名のようにバックティックを使用しない限り、「lead_details」と「charge_details」を引用符で囲む必要はありません。

さらに、挿入する値も正しく引用されていません。ほとんどの言語は、データベース文字列を適切にエスケープおよび引用する機能を提供します。

また、このような状況で問題を指摘するのに役立つため、挿入からの実際のエラーメッセージを確認することをお勧めします。

于 2013-03-26T04:07:02.327 に答える
-1

INSERT INTO lead_to_processes (case_number, style_of_case, circuit, judge, location, disposition, date_filed, disposition_date, case_type, 'lead_details', 'charge_details') VALUES (130025129, 130025129 - CITY, 1st(Jim, Counties), LOVEKAMP, KELLY LAREE, Schuyler, Plea Written, 03/19/2012, 03/19/201, Municipal Ordinance - Traffic, --- 1-address_line_1: 6150 RICHLAND RD 1-address_line_2: '' 1-city: 'GEORGIA' 1-birth_year: '1955' 1-is_alive: 1 , --- 1-Description: Not Available } 1-Code: '95220' );

から始まると130025129 - CITY、入力値は引用符で囲まれていないように見えるため、クエリパーサーはそれを解析できません。各文字列値を一重引用符で囲みます。

于 2013-03-26T04:07:41.663 に答える