2013-07-08 4 views
3

У меня есть следующий код для вставки данных в базу данных TestDB, я могу вставлять и удалять все строки успешно, но удалить одну строку не удалось.SQLite: не удается удалить строку в базе данных

Пожалуйста, покажите мне, что не так с кодом. Я думаю, проблема связана с функцией deleteRow, не признающей значение столбца1.

Благодаря

<script> 

    var db = window.openDatabase("Test", "1.0", "Test DB", 1000000); 
    var column1= document.getElementById("column1"); 
    var column2= document.getElementById("column2"); 
    var column3= document.getElementById("column3"); 
    var results = document.getElementById("results"); 
    var id = document.getElementById('id');  
    var Delete = document.getElementById('Delete');  


    function InsertDB(){ 
     if ((column1.value!='') && (column2.value!='') && (column3.value!='')) { 
     db.transaction(function(tx) { 
      tx.executeSql('CREATE TABLE IF NOT EXISTS TestDB (id INTEGER, column1 TEXT, column2 TEXT, column3 TEXT)'); 
      tx.executeSql('INSERT INTO TestDB (column1, column2, column3) VALUES (?, ?, ?)', [column1.value, column2.value, column3.value], ShowandReset); 
    }); 
    } 
     else alert("Column cannot be empty"); 
    } 



    function ShowDB() { 
    results.innerHTML = ''; 
    db.transaction(function(tx) { 

     tx.executeSql("SELECT * FROM TestDB", [], function(tx, result) { 
     dataset = result.rows; 
     for (var i = 0, item = null; i < dataset.length; i++) { 
     item = dataset.item(i); 
     results.innerHTML += item['column1'] + ' , ' + item['column2'] + ' , ' + item['column3'] + ' ' + '<a href="#" onclick="deleteRow('+item['column1']+')"> Delete this row</a>' + '</br>'; 
     }    

     }); 
      }); 
         } 


function deleteRow(a) { 

    db.transaction(function(tx) { 
     tx.executeSql("DELETE FROM TestDB WHERE column1=a"); 
     }); 
     ShowDB(); 
     } 

function DeleteDB() { 
    db.transaction(function(tx) { 
     tx.executeSql("DELETE FROM TestDB"); 
     }); 
     ShowDB(); 
     } 

function resetForm(){ 
    column1.value = ''; 
    column2.value = ''; 
    column3.value = ''; 
    id.value = ''; 
    } 
function ShowandReset(){ 
    resetForm(); 
    ShowDB(); 
    } 
function LoadRow(i) { 

    var item = dataset.item(i);  
    column1.value = item['column1']; 
    column2.value = item['column2']; 
    column3.value = item['column3']; 
    id.value = item['id']; 
    } 


</script> 

+0

Не знаете, где и как это будет работать, но иметь в виду, что кто-нибудь с доступом к вашему сайту, будет иметь возможность запускать произвольные запросы в вашей базе данных. –

+0

Когда вы что-то не знаете, используйте интерпретатор команд, чтобы узнать, как правильно писать запросы. –

+0

Кроме того, я согласен с @GrimaceofDespair, вы можете использовать защитные механизмы от атаки на вашем сайте. Инъекция Sql является наиболее распространенным способом разрушить вашу работу. –

ответ

1

Ok новое решение теперь, когда проблема была уточнена.

function deleteRow(a) 
{ 
//a is a paramete 
//this is a query string, so you need to append a otherwise it is interpreted litterally 
var queryString = "DELETE FROM TestDB WHERE column1='"+a+"'"; 
//Execute queryString as before 
} 
+0

Да, я только что редактировал заголовок – TrungNguyen

+0

Вы не можете удалить строку из базы данных, база данных содержит список таблиц, таблицы содержат строки. Если вы хотите удалить таблицу из базы данных, использующей DROP, вы хотите удалить определенную строку из таблицы. Вы теперь меньше сбиты с толку? Я полагаю, что тестовую БД следует называть testTable или testTab. В любом случае, я обнаружил вашу синтаксическую ошибку: УДАЛИТЬ ОТ ТЕСТДБРА WHERE column1 = 'a' Строковые litterals должны быть экранированы. – awiebe

+0

Спасибо, что я хочу сделать, это удалить одну строку, которую я уже добавил функцией insertDB(). Я попробовал «УДАЛИТЬ ОТ ТЕСТ-ДИСКА WHERE column1 = 'a'", "УДАЛИТЬ ОТ TestDB WHERE column1 = a" и "УДАЛИТЬ ОТ TestDB WHERE column1 = ?, [a]", но ни один из них не является woking. Я попытался использовать «DELETE FROM TestDB WHERE column1 = 1», а строка имеет значение столбца = 1. Проблема должна заключаться в том, что функция deleteRow (a) не распознает значение a. – TrungNguyen

0

попробовать это:

db.transaction(function (tx) { 
     tx.executeSql('DELETE FROM TestTable', []); 
    }); 

с ИНЕКЕ:

db.transaction(function (tx) { 
     tx.executeSql('DELETE FROM TestTable WHERE COLUMN = ?', [yourValue]); 
    }); 
Смежные вопросы