2012-06-14 21 views
6

Node-mysql'de SELECT WHERE IN'u nasıl kullanacağını bilen var mı?node-mysql dosyasında SELECT IN IN

Ben aşağıdaki kodu denedim, ancak aşağıdaki hata iletisi alıyorum: Sen komutu ters tırnak kullanmayın, Dizelerinizi alıntı yapmak gerek

whereIn = '('; 
for (var i in tagArray) { 
    if (i != tagArray.length - 1) { 
     whereIn += "`" + tagArray[i] + "`,";  
    }else{ 
     whereIn += "`" + tagArray[i] + "`"; 
    } 
} 
whereIn += ')'; 

console.log(whereIn); 

client.query(
    'SELECT tag_id FROM tag WHERE tag_name IN ?', 
    [whereIn], 
    function(err, result, fields) { 
     client.destroy(); 

     if (err) { 
      throw err; 
     } 

     console.log(result); 

     res.redirect('/'); 
    } 
); 
+2

SQL hata mesajlarını sevmiyor musunuz? Soooo0o0o0oo Yararlı – lbstr

cevap

2

:

'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 ''(`PHP`,`apache`)'' at line 1' 

Bu benim kodudur.

whereIn = '('; 
for (var i in tagArray) { 
    if (i != tagArray.length - 1) { 
     whereIn += "'" + tagArray[i] + "',";  
    }else{ 
     whereIn += "'" + tagArray[i] + "'"; 
    } 
} 
whereIn += ')'; 
+0

Evet, backticks değerler için değil. –

+0

Bunu zaten denedim ve bunu anladım, 'SQL sözdiziminde bir hata var; '' (\ 'PHP \', \ 'apache \', \ 'Java \') '' satırında kullanmak için doğru sözdizimine karşılık gelen MySQL sunucu sürümüne karşılık gelen elkitabını kontrol edin: ' :( –

+0

senin sorgu otomatik olarak kaçan tırnaklar gibi onları kaçmayacak bir seçenek var mı? – gcochard

12

Sen IN (?) ve NOT IN ? kullanmak zorunda.

Herhangi bir dize işlemi bir SQL INJECTION arka kapısına neden olabilir.

-1

bir çalışma çözeltisi:

client.query(
    'SELECT tag_id FROM tag WHERE tag_name IN ?', 
    [tagArray], 
    function(err, result, fields) { 
     client.destroy(); 

     if (err) { 
      throw err; 
     } 

     console.log(result); 

     res.redirect('/'); 
    } 
); 

elle tırnak TagArray sarmak gerek yok. Mysql modülü tarafından kaçtı.

+1

Aşağıdakilere parantez eklemelisiniz?: 'SELECT tag_id FROM etiketi WHERE tag_name IN (?)', –

1

Değerlerden kurtulmak zorunda kalmadan daha güvenli bir çözüm için? normalde yaptığınız gibi paramlar yapar, ama bu gibi dinamik olarak param yer tutucuları oluşturun:

var inlist = ''; 
for(var i=0; i<ids.length; i++) { 
    inlist += '?,'; 
} 
inlist = inlist.substring(0,inlist.length-1); 

var sql = 'SELECT a, b, c FROM mytable WHERE id in (' + inlist + ')'; 

conn.query(sql, ids, function(err, rows) { 
    . . . 
})