【问题标题】:Reading data value from mysql database through queries通过查询从mysql数据库中读取数据值
【发布时间】:2017-10-28 18:10:06
【问题描述】:

我的网站上有一个登录和注册 php 系统。它工作得很好。但是我想在数据库中添加另一列。这是平衡。我想在用户登录网站时显示“余额”。 我试图通过使用这个来选择余额数据值:

<?php
$balance = mysqli_query("SELECT balance FROM users WHERE username='$username' 
AND password='$password'");
echo $balance
?>

我是 php 编程新手,因此我不确定这段代码有什么问题。 sql数据库如下:

id    username    email    password    balance
test  test        test     test        test

我会从我的代码中假设变量 $balance 将从收到的值中设置,如果在登录页面上输入的用户名和密码是在数据库中找到的。将打印与此相关的余额。 这包含在我的网页的html部分中以显示余额的值:

<a href="#">Balance: <?php echo $balance ?><span class="sr-only">(current)</span></a>

在测试网站时出现以下错误

警告:mysqli_query() 至少需要 2 个参数,1 个在 D:\Windows\xampp\htdocs\TESTSITE\FrontPage.php 第 3 行给出

我试图通过研究来解决这个问题,但我找不到解决方案。欢迎任何解决方案,因为我已经停止了开发。

此外,我知道这是非常不安全的,我将确保网站上线时代码更加安全。我现在只是在测试。

【问题讨论】:

    标签: php mysql mysqli


    【解决方案1】:

    您有 4 个问题。

    1. 您需要对用户密码进行哈希处理,存储明文密码是不好的做法。
    2. 您需要对查询进行参数化,因为如果没有参数化,您就会对 SQL 注入持开放态度,并且根据用户的用户名/密码可能会无意中破坏您的查询。
    3. query 函数期望参数 1 是连接对象。
    4. query 函数返回一个需要获取的结果对象。

    这是一个应该可以运行的更新版本。这假定$conn 是您的连接。

    <?php
    $stmt = mysqli_prepare($conn, "SELECT balance FROM users WHERE username=? AND password=?");
    mysqli_stmt_bind_param($stmt, 'ss', $user, $password);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_bind_result($stmt, $balance);
    mysqli_stmt_fetch($stmt);
    echo $balance;
    ?>
    

    这不考虑散列。请参阅 http://php.net/manual/en/function.password-hash.phphttp://php.net/manual/en/function.password-verify.php。您目前需要对数据库中的所有值进行哈希处理。

    【讨论】:

    • 试过你的代码有错误:警告:mysqli_stmt_bind_param() 期望参数 1 为 mysqli_stmt,布尔值在 D:\Windows\xampp\htdocs\TEST\FrontPage.php 第 4 行给出警告:mysqli_stmt_execute( ) 期望参数 1 为 mysqli_stmt,布尔值在 D:\Windows\xampp\htdocs\TEST\FrontPage.php 第 5 行给出 警告:mysqli_stmt_bind_result() 期望参数 1 为 mysqli_stmt,布尔值在 D:\Windows\xampp\ 中给出第 6 行的 htdocs\TEST\FrontPage.php 警告:mysqli_stmt_fetch() 期望参数 1 为 mysqli_stmt,布尔值在第 7 行的 D:\Windows\xampp\htdocs\TEST\FrontPage.php 中给出
    • @Jamie prepare 未能使用错误报告来查看原因。您是否将 $conn 更改为您的实际 mysqli 连接变量?像printf("Errormessage: %s\n", mysqli_error($conn)); 这样的东西应该会给你一些回报,请参阅php.net/manual/en/mysqli.error.php 了解更多信息。
    • 我将 $conn 更改为 $db 因为那是连接变量。我还尝试添加 printf("Errormessage: %s\n", mysqli_error($conn));但没有任何改变。
    • 就像prepare 周围一样。
    • 抱歉我不太明白
    【解决方案2】:
    1. 如果你使用 mysqli,你必须这样设置:

      $balance = mysqli_query($connection,"SELECT balance FROM users WHERE username='$username' 
      

      AND password='$password'"); // $connection 是您的连接配置。

    2. 你必须从输入中获得价值,像这样:

      $email = $_POST['email'];
      $pass = $_POST['pass'];
      

    然后从查询中获取布尔值,如下所示:

    if($balance) echo 'success' else echo 'wrong';
    

    【讨论】:

    • 您的第一点在语法上完全不正确。你的第二点完全忽略了我的要求。我希望无需用户输入即可显示数据值。数据值已经在sql数据库中设置好了。
    • 我只是为我的第一个陈述举一个例子,第二个陈述是针对你的问题,没有解释。要显示数据,您必须在 echo 之前先循环查询:-p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 2018-09-06
    相关资源
    最近更新 更多