Insert在phpMyAdmin中失败,但在直接使用MySQL时有效

Insert在phpMyAdmin中失败,但在直接使用MySQL时有效,php,mysql,hash,Php,Mysql,Hash,我正在尝试向MySQL中插入一个哈希,以便测试用户登录。我的第一反应是使用phpMyAdmin使快速更新密码变得更容易(默认哈希值为60 0),直到我开始使用我的网站制作这样做的页面。散列字段是二进制(60)数据类型。我的错误是请输入有效的十六进制输入 要生成哈希,我将使用以下命令: 我已经意识到我在让网站为我做插页的过程中走了一半,但这不是问题所在。我想知道为什么phpMyAdmin>myDB>myTable>browse>edit-then-copy粘贴上面的结果不起作用,但是phpMyAd

我正在尝试向MySQL中插入一个哈希,以便测试用户登录。我的第一反应是使用phpMyAdmin使快速更新密码变得更容易(默认哈希值为60 0),直到我开始使用我的网站制作这样做的页面。散列字段是二进制(60)数据类型。我的错误是请输入有效的十六进制输入

要生成哈希,我将使用以下命令:

我已经意识到我在让网站为我做插页的过程中走了一半,但这不是问题所在。我想知道为什么phpMyAdmin>myDB>myTable>browse>edit-then-copy粘贴上面的结果不起作用,但是phpMyAdmin>myDB>myTable>SQL在使用以下命令时起作用:

UPDATE `myTable` SET `hash`="$2y$10$XFo5biY5UvZfaRjhDraOFO26yocvwiAwidtGNIvoEezj5zitb2Xem" WHERE username = "myusername"
返回phpMyAdmin>myDB>myTable>browse,我发现我的ASCII哈希已更改为十六进制哈希:

2432792431302458466f356269593555765a6661526a684472614f464f3236796f637677694177696474474e49766f45657a6a357a6974623258656d
当我在phpMyAdmin中执行select时,这个十六进制字符串保持不变,但是,使用MySQL控制台,我从未看到十六进制,它始终是ASCII。有人知道为什么我不能在phpMyAdmin中插入ASCII哈希,但我可以在MySQL中插入吗


编辑:死链接,但有一个副本。

我知道这个问题已经四年了,我的答案没有解决问题,但它解释了发生了什么。因此,为了后续搜索者的利益:

您描述的行为是由phpmyadmin UI引起的。更新/插入是ajax调用,验证在浏览器中使用javascript进行。验证查看您正在更新/插入的字段的类型,只允许您使用它认为有效的内容。 我假定您的哈希字段是VARBINARY。当我知道只会输入非语言的8位字符串(如UUID)时,我使用该类型为服务器节省资源来确定字符串的代码集,这与VARCHAR相同。 现在,第1403-1410行上的phpmyadmin/js/makegrid.js可以

...
} else if ($this_field.hasClass('hex')) {
if ($(g.cEdit).find('.edit_box').val().match(/^[a-f0-9]*$/i) !== null) {
this_field_params[field_name] = $(g.cEdit).find('.edit_box').val();
} else {
var hexError = '<div class="error">' + PMA_messages.strEnterValidHex + '</div>';
PMA_ajaxShowMessage(hexError, false);
this_field_params[field_name] = PMA_getCellValue(g.currentEditCell);
}
...
。。。
}else if($this_field.hasClass('hex')){
if($(g.cEdit).find('.edit_box').val().match(/^[a-f0-9]*$/i)!==null){
此字段参数[字段名称]=$(g.cEdit).find('.edit_box').val();
}否则{
var hexError=''+PMA_messages.StrengterValidHex+'';
PMA_ajaxShowMessage(hexError,false);
此字段参数[字段名称]=PMA\u getCellValue(g.currentEditCell);
}
...
这可能是你的问题,就像是我的问题一样。
不幸的是,除了修改源代码之外,我看不到禁用此功能的方法,这不是一个好主意,因为它将被下一个版本更新覆盖。

我还发现了一个懒惰的解决方法

如果双击编辑二进制字段,您可以输入任何有效字符串,例如“a”。这将被接受并更新表格。此外,phpMyAdmin将在框架顶部输出sql查询(更新
表格
设置
字段
='a'),并在其右侧下方提供[编辑内联]按钮。

然后,只需将十六进制字符串粘贴到查询中。

如果我记得的话,我使用的是“BINARY(60)”,而不是VARBINARY。我有时会很迂腐,所以如果我在上面写的话,我使用的是BINARY(60),这很可能就是我所用的。如果有人好奇,我写了一个小提琴来展示gsl有用地指出的内容。太真实了,TeckFudge。我错过了那个细节。为了帮助其他人学习如何解决上述问题,或者仅仅出于我自己的好奇,你是如何找到导致我问题的令人不快的代码的?我想你是吧有一个类似的问题,在研究后,找到了我的帖子。我和你的位置完全一样,可以自己发布这个问题。事实上,我已经形成了我的假设,希望可以通过ini文件中的设置来禁用它。因为你的问题没有得到回答,而且我在其他地方找不到任何相关信息,作为一个我开始在phpMyAdmin代码中插入显示的错误消息,找到了它,这让我找到了“StrengterValidHex”和上面发布的js,这解释了原因并表明它不能被设置覆盖。
...
} else if ($this_field.hasClass('hex')) {
if ($(g.cEdit).find('.edit_box').val().match(/^[a-f0-9]*$/i) !== null) {
this_field_params[field_name] = $(g.cEdit).find('.edit_box').val();
} else {
var hexError = '<div class="error">' + PMA_messages.strEnterValidHex + '</div>';
PMA_ajaxShowMessage(hexError, false);
this_field_params[field_name] = PMA_getCellValue(g.currentEditCell);
}
...