【问题标题】:unable to display search results OOP无法显示搜索结果 OOP
【发布时间】:2014-10-20 13:50:34
【问题描述】:

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

<?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());
        }

    }

【问题讨论】:

  • 我在上面的代码中遇到的主要问题是显示搜索结果。如果有一些我没有看到的问题,请告诉我。
  • 您可以随时编辑您的问题。目前它真的需要它,因为它不明显你的问题是什么
  • 1.SELECT*FROM 应该是 SELECT * FROM 2. 绑定应该在执行之前进行 3. 查询中的绑定必须提供一个占位符。
  • 你不会因为SELECT*FROM而获得任何字节——让它呼吸SELECT * FROM

标签: php oop search


【解决方案1】:

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

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

或mysqli并绑定参数并然后执行: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();

注意是否使用准备:

查询调试:

要获取 mysqli 错误,请在执行或查询调用后使用:or die(mysqli_error($db)

解决方案

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

【讨论】:

    【解决方案2】:

    几个编程建议。

    1. PHP 是动态类型的,所以一个变量或函数的结果值,可能返回不同的变量类型,坚持单一类型。

    在某些情况下,可以使用null,而不是预定义的类型,例如, 未找到搜索时返回null,而不是整数值。

    1. 对于 PHP,使用 cmets 来确定函数接收或返回的数据类型。

    之前。

    public function user_exists($username) {
    

    之后。

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

    它不会改变您的代码逻辑,但可以帮助任何程序员(无论是您还是其他人)理解函数的逻辑。

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

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

    之前。

    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”和其他编程环境,也欢迎一些好的“房屋清洁”,并帮助您更好地控制您的编程逻辑。

    1. 在返回值的函数(非void函数)中使用“try”语句时,将异常结果分配给局部变量,并将die转移到“finally”部分。

    例子:

    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);
        }
    }
    

    干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 2023-04-07
      • 2013-01-14
      • 2014-01-20
      相关资源
      最近更新 更多