mySQL query error: SELECT hash('SHA512', ( CONCAT( lang_id, '-', word_app, '-', word_pack, '-', word_key ) ) as word_lookup, word_id, hash('SHA512', word_default) as word_default, word_default_version FROM forum_core_sys_lang_words WHERE word_app='core' AND lang_id IN(1)
SQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('SHA512', ( CONCAT( lang_id, '-', word_app, '-', word_pack, '-', word_key ) ) a' at line 1
SQL error code: 1064
Date: Thursday 18th July 2013 03:34:35 PM
我正在使用IPBoard论坛,我决定不使用MD5,而是使用SHA512。
我使用的是notepad ++,所以我只用md5(
重命名了所有hash('SHA512',
。
安装完成后,我收到了这个SQL错误。
这是否意味着SQL查询不支持hash()? 我该如何解决?
$this->DB->build( array( 'select' => "hash('SHA512', ( CONCAT( lang_id, '-', word_app, '-', word_pack, '-', word_key ) ) as word_lookup, word_id, hash('SHA512', word_default) as word_default, word_default_version",
'from' => 'core_sys_lang_words',
'where' => "word_app='{$app_override}' AND lang_id IN(" . implode( ",", $lang_ids ) . ")" ) );
$this->DB->execute();
答案 0 :(得分:1)
MySQL中的哈希函数是SHA1和SHA2。您可以参考MySQL文档以获取正确的语法(https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_sha2)
在您的情况下,代码应为
$this->DB->build( array(
'select' => "SHA2(CONCAT( lang_id, '-', word_app, '-', word_pack, '-', word_key ), 512) AS word_lookup, word_id, SHA2(word_default, 512) AS word_default, word_default_version",
'from' => 'core_sys_lang_words',
'where' => "word_app='{$app_override}' AND lang_id IN(" . implode( ",", $lang_ids ) . ")"
));
SHA2仅适用于5.5.5及更高版本的MySQL。或者,您可以使用旧的SHA1函数,但在这里您无法控制位长。
答案 1 :(得分:0)
改变这个:
SELECT hash('SHA512', ( CONCAT( lang_id, '-', word_app, '-', word_pack, '-', word_key ) ) as word_lookup
到此:
SELECT hash('SHA512', CONCAT( lang_id, '-', word_app, '-', word_pack, '-', word_key ) ) as word_lookup