我对此非常生气,所以我向人群寻求帮助;)
我想做什么:我们有一个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)"
谢谢,非常感谢任何意见!
答案 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语句中。