0

大家好,这是我关于堆栈溢出的第一个问题。我正在使用 webSQL 和 javascript 开发一个带有 phonegap 的应用程序。在我的应用程序中有一个登录表单,它需要两个输入:用户名和密码。当用户填写这些值并单击登录时,这些值将在具有多行的数据库表中进行检查。为了检查我正在使用这个查询的值-

var email=document.getElementById("uname").value;
tx.executeSql('SELECT * FROM USERINF Where Email=email', [], MatchPass, errorCB1);

但是该查询不适用于带有 java 脚本变量的 where 子句。我也尝试过许多语法,例如

where Email=@email
where Email="+email+"

还有更多,但他们都没有工作。

是否可以使用带有 where 子句的 javascript 变量?如果是,请告诉我如何。如果不是,请建议我任何其他方式来完成任务。提前致谢。

这是我完整的JavascriptCode

// JavaScript Document
var db=window.openDatabase("CakeViewer", "1.0", "Cake Viewer", 2*1024*1024);

function login()
{

db.transaction(matchcred)

function matchcred(tx)
{
    var eml=document.getElementById("uname").value;
     tx.executeSql('SELECT * FROM USERINF Where Email=eml', [], MatchPass, errorCB1); 
 //problem is in above line-- the query is not executed with variable where clause. But it works fine if I use where Email="abc@abc.com"

}


function MatchPass(tx, results)
{
    var orgnalPass=results.rows.item(0).Password;   
    var userinputedPass=document.getElementById("pass");

    if(orgnalPass==userinputedPass.value)
    {
        window.location.href='HomePage.html';
    }
    else
    {
        errorCB();
    }
}

function errorCB(tx,err)
{
    alert("User Name or Password is not valid !");
    document.getElementById("uname").value="";
    document.getElementById("pass").value="";
}

function errorCB1()
{
    alert("Query failed");
}

function errorCB2(tx,err)
{
    alert("errorCB2"+err);
}
}
4

3 回答 3

10

最简单的方法是使用问号 (?) 来指定变量。

例如:

tx.executeSql('SELECT Data from Table Where something = ?', [email], MatchPass, errorCB1);

?'s 从左到右解析,并从左到右匹配 [] 之间的变量。

另一个例子:

tx.executeSql('SELECT Data from Table Where email = ? AND username=?', [email, username], MatchPass, errorCB1);
于 2012-09-05T06:53:48.707 回答
0
tx.executeSql("SELECT * FROM USERINF Where Email='"+email+"'" , 
于 2012-08-03T06:21:22.437 回答
-1

要在查询中获取 js 变量email的值,您需要使用 + 运算符进行连接。还用引号将值括起来,因为值可能是字符串

tx.executeSql('SELECT Data from Table Where something = "'+ email+ '"', [], MatchPass, errorCB1);
于 2012-08-03T06:25:05.790 回答