2013-07-08 38 views
3

我有以下代碼將數據插入到TestDB數據庫中,我可以插入和刪除所有行成功,但刪除一行不起作用。SQLite:無法刪除數據庫中的行

請告訴我代碼有什麼問題。我認爲問題來自函數deleteRow無法識別column1值。

感謝

<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

現在好了新的解決方案,這個問題已經得到澄清。

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。 無論如何我發現你的語法錯誤: DELETE FROM TestDB WHERE column1 ='a' 字符串litterals必須轉義。 – awiebe

+0

謝謝,我想要做的是刪除一行,我已經通過insertDB()函數添加。 我試過「DELETE FROM TestDB WHERE column1 ='a'」,「DELETE FROM TestDB WHERE column1 = a」和「DELETE FROM TestDB WHERE column1 = ?, [a]」,但他們都沒有在開火。 我試過使用「DELETE FROM TestDB WHERE column1 = 1」,行的列值= 1被刪除。 問題一定是函數deleteRow(a)不能識別a是一個值。 – TrungNguyen

0

試試這個:

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

與WHERE子句:

db.transaction(function (tx) { 
     tx.executeSql('DELETE FROM TestTable WHERE COLUMN = ?', [yourValue]); 
    });