大家好,这是关于堆栈溢出的第一个问题。 我正在开发一个带有phonegap的应用程序,使用webSQL和javascript。 在我的应用程序中有一个登录表单,它接受两个输入:用户名和密码。 当用户填写这些值并单击Login时,将在具有多行的数据库表中检查这些值。 检查值我正在使用此查询 -
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);
}
}
答案 0 :(得分:10)
最简单的方法是使用问号(?)来指定变量。
例如:
tx.executeSql('SELECT Data from Table Where something = ?', [email], MatchPass, errorCB1);
从左到右解析?并从左到右匹配[]之间的变量。
另一个例子:
tx.executeSql('SELECT Data from Table Where email = ? AND username=?', [email, username], MatchPass, errorCB1);
答案 1 :(得分:0)
tx.executeSql("SELECT * FROM USERINF Where Email='"+email+"'" ,
答案 2 :(得分:-1)
要在查询中获取js变量 email 的值,您需要使用+运算符进行连接。还要使用引号包装值,因为value可能是字符串
tx.executeSql('SELECT Data from Table Where something = "'+ email+ '"', [], MatchPass, errorCB1);