- .. , . , , .
, , SQL, SQL .. SQL- prepare().
, , SQL- . ( ) .
SQL-.
SQL Injection Myths and Fallacies SQL Antipatterns: .
:
, . , , t.targetLang 'targetLang'. , , - :
where i.userID = ? And i.translated = 0
and t.targetLang = ?
Image.setString(2, langID); // either '3' or 'targetLang'
, . , ? , t.targetLang? , , . , :
where i.userID = ? And i.translated = 0
and FIELD(t.targetLang, t.targetLang, t.column2, t.column3, t.column4) = ?
Image.setString(2, '1');
Image.setString(2, '3');
. FIELD() MySQL, . , .
, , , t.targetLang , , . .
, . SHOW CREATE TABLE translationChains . , , , t.targetLang ?
, . , , :
SELECT i.imageID, theImage, translationRating
i
INNER JOIN TranslationChains t ON t.imageId = i.imageid
i.userID =? i.translated = 0 ? IN (t.targetLang, 'targetLang')
, t.targetLang, targetLang, 'targetLang ' .
, , , , , , , .
, , WHERE. , , , . Image.setString().
String sql = "SELECT i.imageID, theImage, translationRating
FROM Images i
INNER JOIN TranslationChains t
ON t.imageId = i.imageid
WHERE i.userID = ? AND i.translated = 0 ";
if (langId) {
sql += " AND ? IN (t.targetLang, 'targetLang')";
}
. . .
Image.setInt(1, userID);
if (langId) {
Image.setString(2, langID);
}
Image.executeQuery()