Как убежать? данные, которые вставляются в базу данных sqlite. - PullRequest
8 голосов
/ 30 сентября 2011

Я создаю приложение Apple, используя разрыв телефона (который использует базу данных sqlite).

Все мои вставки работают нормально, за исключением случаев, когда я пытаюсь вставить веб-ссылку.Это ошибки, потому что в веб-ссылке есть символы.

Использование следующего:

var content = 'hello, this is my <a href="www.google.com">link</a>'
tx.executeSql('UPDATE PAGES SET content="'+content+'" WHERE id="1"');

Возвращает следующую ошибку

error code 1
error: "near "http": syntax error"

Если я удалю адрес сайта, Я не получаю сообщение об ошибке. Я попытался: content = escape (content);

, но это не сработало.

Ответы [ 4 ]

11 голосов
/ 30 сентября 2011

Использовать привязку параметров. Это правильный и самый безопасный способ сделать то, что вы пытаетесь сделать.

tx.executeSql('UPDATE PAGES SET content=? WHERE id=1', [content]);
4 голосов
/ 30 марта 2013

Чтобы избежать кавычек в SQLite, вам нужно повторить кавычки.

Таким образом, чтобы вставить a 7" screen, вам нужно будет поставить a 7"" screen в операторе INSERT.

1 голос
/ 25 января 2012

Проблема в кавычках. Они изменяют смысл запроса SQL и вызывают ошибку.

Я не могу найти никакой информации о том, как их избежать. Я прочитал, что вы можете поставить \ перед ними, а затем добавить ESCAPE ("\") в оператор SQL, но это не похоже на реализацию PhoneGap.

В конце я сделал простую замену, где одинарные или двойные кавычки заменяются на &quot;, например так:

var thisNotes = $('textarea#notes').val().replace(/(["'])/g,'&quot;');

Однако мне просто нужно отображать кавычки в текстовом поле - они мне не нужны как часть HTML-ссылки, поэтому я не уверен, будет ли эта ссылка работать. Возможно, вам придется отменить замену перед отображением ссылки.

Надеюсь, это поможет.

0 голосов
/ 30 сентября 2011

используйте javascript replace, возможно, создайте такую ​​функцию:

function CleanDbData( dirty ){
     var clean = dirty.replace( "/"","''").replace("<script>","[script]");
     return clean;
}

var mydata = CleanDbData( dirtydata );

это не так, как есть, вам придется связываться с регулярным выражением и т. Д., Но вы поймете идею [надеюсь]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...