2016-09-14 2 views
3

テキストに文字列 "$(...)"が含まれていると、データベースにテキストを挿入できません エラー:プロパティ '...'存在しません。

const pgp = require('pg-promise')({ promiseLib: bluebird }); 
const db = pgp(process.env.DATABASE_URL); 
let values = [{text: 'this is fine'}, {text: 'this fails $(...)'}]; 
let cs = new pgp.helpers.ColumnSet(['text']); 
let query = pgp.helpers.insert(values, cs); 
db.manyOrNone(query); 

"これは単なるテキストです"というプロパティがありますか?全体のSQL呼び出し

'use strict'; 
const bluebird = require('bluebird'); 
const pgp = require('pg-promise')({ promiseLib: bluebird }); 
const db = pgp('postgres://localhost/okeydokey-local'); 

db.any(
    'CREATE TABLE text_table (' + 
    'text_column text ' + 
    ')' 
); 
let values = [{ text_column: 'this is fine' }, { text_column: 'this fails $(test)' }]; 
let cs = new pgp.helpers.ColumnSet(['text_column'], {table: 'text_table'}); 
let query = pgp.helpers.insert(values, cs); 
console.log(query); 
db.manyOrNone(query + 
    'some more SQL dependent on $(somethingElse)', 
    { 
    somethingElse: 'someValue' 
    } 
); 

に他の変数を追加するために$()構文を使用している場合

おかげ

EDIT エラーは発生していた

insert into "text_table"("text_column") values('this is fine'),('this fails $(test)') 
Unhandled rejection Error: Property 'test' doesn't exist. 
+0

具体的にどのライン/操作が正確に失敗しているかを具体的に説明してください。また、生成されたクエリと完全なコード(クエリを生成するときにテーブルを指定しないため、サンプル内のコードは機能しません)を提供してください。 –

答えて

2

出力は、次の行は、あなたを生成し、最終クエリ:

追加の書式設定のためのクエリテンプレートではなく、直接実行されるはずです。

コードでは、書式設定オブジェクトでプロパティtestの検索を中断する最終クエリ文字列を書式化しようとしています。

+0

ヘルパーを使用して、 'の「text_table」(「text_column」)値に挿入する('これは問題ありません) '('これは失敗します(テスト) ') コンフリクトの場合do更新セット... 私の更新ステートメントが$(変数) –

+0

@ Nathsn Evantを使用して変数を入力する場所と同様のことをしたいので、生成されたクエリ文字列に 'ON CONFLICT'部分を追加してください。 –

+0

@ NathanEvans何らかの理由で書式設定が必要な文字列を修正したい場合は、例えば 'pgp.as.format()'のように別々に生成する必要があります。変数にはすでに文字列が含まれている可能性があるため、生成された最終クエリに変数を挿入しようとしないでください。文字列値として何があるかを知る方法はありません。 –

関連する問題