无法显示搜索结果OOP

时间:2014-10-20 13:50:34

标签: php oop search

此代码部分用于要显示结果的另一个页面。

<?php

require 'core/init.php'; //all classes are contained in here.
$general->logged_out_protect();
$search = $_POST['search'];
if ($users->user_exists($_POST['search']) == false) {
    $errors[] = "Sorry that username doesn't exists";
} else
if ($users->user_exists($_POST['search']) == true) {
    // i would like to display username which is in the user_exists if the above condition is met.
    }
}
?>

//这是函数user_exists,我在其中确定用户名是否在数据库中,然后我显示用户名。

public function user_exists($username) {

        $query = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `username`= ?");
        $query->bindValue(1, $username);

        try{

            $query->execute();
            $rows = $query->fetchColumn();

            if($rows == 1){
                return true;
            }else{
                return false;
            }

        } catch (PDOException $e){
            die($e->getMessage());
        }

    }

2 个答案:

答案 0 :(得分:1)

您要么使用PDO并执行:http://php.net/manual/en/pdo.prepare.php

$sth->execute(array(':calories' => 150, ':colour' => 'red'));

或mysqli并绑定param和然后执行:http://php.net/manual/en/mysqli.prepare.php

if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {

/* bind parameters for markers */
$stmt->bind_param("s", $city);

/* execute query */
$stmt->execute();

请注意,如果您使用prepare:

查询调试:

在执行或查询调用后使用or die(mysqli_error($db)来获取mysqli错误。

溶液

  1. 更改execute()和bind_param()的顺序(首先是bind_param()然后执行())
  2. 你的SQL查询应该是:"SELECT * FROM users WHERE username like '%$?%'"

答案 1 :(得分:0)

几个编程建议。

  1. PHP是动态类型的,因此变量或函数结果值可以返回不同的变量类型,坚持单一类型。
  2. 在某些情况下,可以使用null,而不是预定义的类型,例如, 找不到搜索时返回null,而不是整数值。

    1. 对于PHP,使用注释来确定函数接收或返回的数据类型。
    2. public function user_exists($username) {
      

      public /* bool */ function user_exists(/* string */ $username) {
      

      它不会改变你的代码逻辑,但是,帮助任何程序员,无论是你或他人,理解函数的逻辑。

      1. 在返回值(非void函数)的函数中使用“try”语句时,只使用一个“try”语句。

      2. 在返回值(非void函数)的函数中使用“try”语句时,在“try”之前使用空值声明局部变量,并在“try”内部进行所有赋值尝试“:

      3. public function user_exists($username) {
            $query = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `username`= ?");
            $query->bindValue(1, $username);
        
            try{
        
                $query->execute();
                $rows = $query->fetchColumn();
        
                if($rows == 1){
                    return true;
                }else{
                    return false;
                }
        
            } catch (PDOException $e){
                die($e->getMessage());
            }
        }
        

        public function user_exists($username) {
            $query = null;
        
            try{
              $query = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `username`= ?");
              $query->bindValue(1, $username);
        
                $query->execute();
                $rows = $query->fetchColumn();
        
                if($rows == 1){
                    return true;
                }else{
                    return false;
                }
        
            } catch (PDOException $e){
                die($e->getMessage());
            }
        }
        

        这允许您在生成异常时在catch部分中读取它们的值, 或者在catch部分或finally部分清除它们。

        即使PHP环境被收集为:Java,“。Net”和其他编程环境,也欢迎一些好的“House Cleaning”,并帮助您更好地控制编程逻辑。

        1. 在返回值(非void函数)的函数中使用“try”语句时,将异常结果分配给局部变量,并将die传递给“finally”部分
        2. 示例:

          public function user_exists($username) {
              $query = null;
              $ExceptionMsg = "";
              $AnyException = false;
          
              try{
                $query = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `username`= ?");
                $query->bindValue(1, $username);
          
                  $query->execute();
                  $rows = $query->fetchColumn();
          
                  if($rows == 1){
                      return true;
                  }else{
                      return false;
                  }
          
              } catch (PDOException $e){
                  $ExceptionMsg = $e->getMessage();
                  $AnyException = true;
              } finally{
                  if ($AnyException)
                    die($ExceptionMsg);
              }
          }
          

          干杯。