为什么这个SQL语句会导致错误?

时间:2015-03-13 01:24:50

标签: java sql phpmyadmin

我对此非常生气,所以我向人群寻求帮助;)

我想做什么:我们有一个Unity学习游戏,它将实现一个登录窗口。然后对输入的凭据进行哈希处理(pw为)并发送给服务器,然后服务器应该对数据库进行检查。

我有下表:

xy.users_confirms,其中包含以下列:

id用户名电子邮件密码哈希码创建

为什么我的代码

String sql = "SELECT " + "xy.users_confirms.password as pwhash, "
                        +"FROM xy.users_confirms "  +"WHERE xy.users_confirms.username = " +"\"userNameToGetHashFor\"";

引导我进入SQLException"参数索引超出范围(1>参数个数,为0)"

谢谢,非常感谢任何意见!

3 个答案:

答案 0 :(得分:1)

试试这个:

 String parameter = "'"+ strNameToGetHashFor + "'";
 String sql = "SELECT " + "xy.users_confirms.password as pwhash, "
             +"FROM xy.users_confirms "  
             +"WHERE xy.users_confirms.username ="+ parameter;

您使用varchar值作为参数,因此需要像这样引用。'username'。或者你可以使用Stored Procedure

答案 1 :(得分:1)

就个人而言,我会尝试直接在phpmyadmin中使用自定义查询框获取有效查询。一旦有了可用的查询,就可以在java中重新编写它。

我会尝试将这样的语法写入phpmyadmin查询框:

SELECT password as pwhash
FROM xy.users_confirms
WHERE username ='userNameToGetHashFor'

使用上述语法,我无法看到您的错误可能会持续存在。

显示自定义查询框的Phpmyadmin屏幕截图:http://screencast.com/t/9h8anH0Aj (屏幕截图中的2个空文本框只是我隐藏了我的数据库信息)

答案 2 :(得分:1)

pwhash之后的逗号是一个潜在的原因:

       + "xy.users_confirms.password as pwhash*!*,*!* "

根据DBMS的不同,您可能还需要使用单引号而不是双引号,如下所示:

       + "'userNameToGetHashFor'";

此代码也可能容易受到SQL注入攻击,因此您可能希望将userNameToGetHash作为参数,而不是将字符串连接到SQL语句中。