0

我有下面的代码。当我在没有WHERE子句的情况下使用此代码时,将按预期显示表中的所有用户。但是当使用该WHERE子句时,什么都不会显示。

可能是什么原因,我该如何解决?

谢谢!

function requestUser($user) {
  $DBHost   = "localhost";
  $DBUser   = "dbUser";
  $DBPass   = "dbPass";
  $DBName   = "dbName";

  $db = new mysqli($DBHost, $DBUser, $DBPass, $DBName);
  if ($db -> connect_errno > 0) { 
    $lbOK = false; 
  }
  else {
    $lbOK = $db -> set_charset('utf8');
  } 

  if ($lbOK) {
    $id         = NULL;
    $user_name  = NULL;
    $user       = htmlentities($user, ENT_QUOTES);
    $lcSQL      = "SELECT `user_name` FROM `users` WHERE user_name=?";
    $stmt       = $db -> prepare($lcSQL);
    $ok         = $stmt -> bind_param('s', $user);
    $ok         = $stmt -> execute();
    $ok         = $stmt -> bind_result($user_name);

    while ($row = $stmt -> fetch()){
      echo $user_name;
    }

    $stmt->close();
  }
}
4

1 回答 1

0

您的代码存在许多重大错误,其中一些可能是问题的原因,而另一些则不是。但无论如何,他们都必须纠正

  1. 切勿在应用程序功能内连接 co 数据库。在引导文件中的某处连接一次,然后在整个应用程序中使用该单一连接。
  2. 不要将 htmlentities 与任何数据库交互一起使用。它可能很容易破坏数据
  3. 始终检查错误
  4. 不要使用mysqli,它是不可用的。请改用 PDO。

    $dsn = "mysql:host=DBHost;dbname=DBName;charset=utf8";
    $opt = array(
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    );
    $pdo = new PDO($dsn,$DBUser, $DBPass, $opt);
    
    function requestUser($user) {
      global $db;
    
      $sql  = "SELECT `user_name` FROM `users` WHERE user_name=?";
      $stmt = $db->prepare($sql);
      $stmt->execute(array($user));
      return $stmt->fetchColumn();
    }
    echo requestUser($user);
    

如果它仍然不起作用,请以这种方式验证

  $sql  = "SELECT `user_name` FROM `users` WHERE user_name='$user'";
  var_dump($sql);

然后尝试在控制台/phpmyadmin 中运行以找出您的数据/值有什么问题

于 2013-04-17T08:17:17.337 回答