Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli不执行Select语句_Php_Mysql_Select_Mysqli - Fatal编程技术网

Php mysqli不执行Select语句

Php mysqli不执行Select语句,php,mysql,select,mysqli,Php,Mysql,Select,Mysqli,我有下面的密码。当我在不使用WHERE子句的情况下使用此代码时,表中的所有用户都会按预期显示。但是当使用WHERE子句时,不会显示任何内容 原因可能是什么?我如何修复 谢谢大家! function requestUser($user) { $DBHost = "localhost"; $DBUser = "dbUser"; $DBPass = "dbPass"; $DBName = "dbName"; $db = new mysqli($DBHost, $D

我有下面的密码。当我在不使用
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();
  }
}

代码中有许多主要错误,其中一些可能是问题的原因,而另一些则不是。但无论如何,它们都必须得到纠正

  • 永远不要在应用程序函数中连接co数据库。在引导文件中的某个位置连接一次,并在整个应用程序中使用该连接
  • 不要在任何数据库交互中使用htmlentities。它很容易破坏数据
  • 始终检查错误是否存在
  • 不要使用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);
    

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

    可能没有人与where子句匹配!您确定有用户名为“?”的用户吗?是的,有符合条件的用户。谢谢您的提示。我发布的函数只是为了测试。在我的应用程序中,DB连接是在引导中建立的。你给我的代码使用PDO方法,我不能使用PDO,因为它在服务器上不可用。。。无法改变这一点…数据库中有用户与WHERE子句匹配。我刚刚用MySQL 5+在服务器上测试了我的代码,它正在工作。在服务器上,我必须使用MySQL 4.1.22(如PHP手册中所述,高于4.1)。这可能是原因吗?不。您需要在服务器上用实际数据测试代码。完成!我已经在两台服务器上重新创建了数据库。在一个MySQL 5+上它可以工作,在另一个上它不工作。