2016-04-19 11 views
0

次のSQLクエリをMySQLデータベースに、nodeJSとnode-mysql packeをnpmで追加して実行する際に問題が発生しました。コンソールにはエラー、次の書き込み、これを実行するnodes-mysqlを使用した複雑なSQLクエリ

var arrValues = [ -12.9747, -38.4767, 213287181, 'Salvador, Brazil' ]; 
var arrNames = [ 'latitude', 'longitude', 'locationID', 'name' ]; 
var locationID = "214777725"; 
if(imageData["locationID"] != null) { 
    var query = "INSERT INTO locations ? "; 
    query = query + " SELECT (?)"; 
    query = query + " FROM dual WHERE NOT EXISTS"; 
    query = query + " (SELECT * FROM locations WHERE locationID = ?)"; 
    console.log(query); 
    connection.query(query, [arrNames,arrValues,locationID], function(err,res) 
    { 
     if(err) 
     { 
     console.log(err); 
     } 
     else 
     { 
     console.log("Insert-Success: " +id); 
     } 
    }); 
} 

INSERT INTO locations (locationID,name,latitude,longitude) 
SELECT '214777725','Bryans Road, 
Maryland','38.628055556','-77.081666667' 
FROM dual WHERE NOT EXISTS 
(SELECT * FROM locations WHERE locationID = '214777725') 

私は、次のコードを試してみた

{ 
    code: 'ER_PARSE_ERROR', 
    errno: 1064, 
    sqlState: '42000', 
    index: 0 
} 

は私が誰かを助けることができると思います。

+0

「locationID」を主キーにするのはなぜですか。そのキーを再利用しようとする挿入が失敗するだけです。プレースホルダはSINGLE値のみを表すことができます。それらを使用して複数のフィールドを置き換えることはできません。それらは1:1マッピングではなく、1:nまたはn:1 –

+0

あなたの答えをありがとう。私はそれが文字列であるため、主キーとしてlocationIDを設定することはできません。 – hengel28

答えて

0

.toString()を使用する必要があるようです。あなたの配列の関数

connection.query(query, [arrNames.toString(),arrValues.toString(),locationID], function(err,res) 
{ ... 
+0

これで動作します。私は値を持つ文字列として全体のクエリを作成していますし、私はこのクエリをパラメータなしで実行しています。ありがとうございました。 – hengel28

関連する問題