【问题标题】:sql error when using HASH()?使用 HASH() 时出现 sql 错误?
【发布时间】:2013-07-17 16:01:21
【问题描述】:
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。 我使用的是记事本++,所以我只是将所有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();

【问题讨论】:

  • 您有 3 个 ( 左括号,但在您的第一次 hash() 调用中只有 2 个 ) 右括号...
  • 请阅读thisthisthis

标签: php hash md5


【解决方案1】:

改变这个:

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

【讨论】:

  • 你还需要改变 $this->DB->build( array( 'select' => "hash('SHA512', ( CONCAT( lang_id, '-', word_app, '-' , word_pack, '-', word_key ) ) 作为 word_lookup 到 $this->DB->build( array( 'select' => "hash('SHA512', CONCAT( lang_id, '-', word_app, '-', word_pack, '-', word_key ) ) as word_lookup
【解决方案2】:

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 仅在 MySQL 5.5.5 及更高版本中可用。或者,您可以使用旧的 SHA1 函数,但在这里您无法控制位长。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多