Php mySQL SELECT WHERE只找到一些条目?

时间:2018-01-26 20:25:31

标签: php mysql

我有一个非常奇怪的问题让我发疯。 我正在尝试创建一个可搜索加密货币钱包地址的数据库(表)。 这是奇怪的部分,查询将找到一些而不是其他人。 最初我按原样加载了大小写字母混合的地址。 之后只发现了一些我十六进制编码的地址,同样的问题。 我已经多次更改了搜索语句,因为我不知道它应该是什么样的。

该表应该有3列1.id,2。用户哈希,3。钱包地址。 我需要能够搜索钱包地址并返回用户哈希值。 我需要它作为PHP中的函数编写。 我的第一批条目大约是20,000行。 恕我直言,它应该是一个非常直接的SELECT WHERE语句?

我甚至不知道从哪里开始搜索问题? 我可以给你十几个不起作用的代码示例,我只需要一个可行的代码示例。 任何帮助是极大的赞赏。如果有一个简单的解决方案可以用谷歌搜索,我不会问这个任务。

public static function get_usr($address){
    $address=bin2hex(trim($address));
    $conn = new mysqli(MYSQL_SERVER, MYSQL_LOGIN, MYSQL_PASSWORD, MYSQL_BASE);
    $sql = "SELECT hash FROM usr WHERE address = '$address'";
    $result = mysqli_query($conn, $sql);
    if (mysqli_num_rows($result) > 0) {
        // output data of each row
        while($row = mysqli_fetch_assoc($result)) {
            echo "hash: " . $row["hash"]. "<br>";
        }
    } else {
        echo "0 results";
    }
    mysqli_close($conn);
}

2 个答案:

答案 0 :(得分:0)

这是最可怕的事情。 我删除了十六进制编码,检查列是否区分大小写。 刷新表并重新加载数据。 现在它似乎工作?我不能从早些时候重现我自己的失败? 我很高兴它现在似乎工作但我没有改变代码中的任何内容与上面发布的内容相比? (除去bin2hex除外)

答案 1 :(得分:-2)

查询应该就这么简单。

SELECT `hash`
FROM `user`
WHERE `address` = '$address' ;

在phpMyAdmin中,如果你转到表格然后是结构选项卡,索引就是其中一个选项。我建议索引地址列。

除此之外,我唯一能想到的是,对于六进制编码数据存在问题,或者bin2hex(trim())调用是否正在剥离应该存在的内容?

最终的问题虽然必须与数据本身或数据库本身有关,因为在phpMyAdmin中运行查询也不起作用。您需要采取的第一步是在那里工作,直到您获得正确填充的查询。如果您可以轻松地重新导入数据,我会清空表并重新将其重新导入。我建议您将地址列类型设置为varChar 255,然后您不必担心转换地址。