【问题标题】:mysqli does not execute Select statementmysqli 不执行 Select 语句
【发布时间】:2013-04-09 19:35:51
【问题描述】:

我有下面的代码。当我在没有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();
  }
}

【问题讨论】:

  • 可能没有匹配到where子句的人!
  • 您确定您有用户名为“?”的用户?
  • 是的,有符合条件的用户。

标签: php mysql select mysqli


【解决方案1】:

您的代码存在许多重大错误,其中一些可能是问题的原因,而另一些则不是。不过还是要改正

  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 中运行以找出您的数据/值有什么问题

【讨论】:

  • 感谢您的提示。我发布的功能仅用于测试。在我的应用程序中,数据库连接是在引导程序中建立的。你给我的代码使用了 PDO 方法,我不能使用 PDO,因为它在服务器上不可用......并且无法更改......
  • 数据库中有符合WHERE子句的用户。
  • 我刚刚在使用 MySQL 5+ 的服务器上测试了我的代码,它正在运行。在我必须完成这项工作的服务器上,有 MySQL 4.1.22(如 phpManual 中所述,高于 4.1)。这可能是一个原因吗?
  • 没有。您需要使用实际数据在服务器上测试您的代码。
  • 完成!我已经在两台服务器上重新创建了数据库。在 MySQL 5+ 的一个上它可以工作,在另一个它没有。
猜你喜欢
  • 1970-01-01
  • 2017-09-20
  • 2021-04-17
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多