Php 无法显示搜索结果OOP

Php 无法显示搜索结果OOP,php,oop,search,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 doe

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

<?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.
    }
}
?>

您可以使用PDO并执行:

或mysqli和bind param,然后执行:

注意:如果使用“准备”:

您不需要转义输入字符串 你需要使用什么?作为占位符或:占位符: 查询调试: 要获取mysqli错误,请在执行或查询调用后使用:或diemysqli_error$db

解决方案 更改execute和bind_参数的顺序先绑定_参数,然后执行 您的sql查询应该是:从用户名为“%$?%”的用户中选择*
一些编程建议

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

对于PHP,使用注释确定函数接收或返回的数据类型。 以前

public function user_exists($username) {
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 /* bool */ function user_exists(/* string */ $username) {
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());
    }
}
它不会改变您的代码逻辑,但是可以帮助任何程序员,无论是您还是其他人,理解函数的逻辑

在返回非void函数值的函数中使用try语句时,只能使用单个try语句

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

以前

public function user_exists($username) {
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 /* bool */ function user_exists(/* string */ $username) {
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部分读取它们的值, 或在捕捉部分或最终部分进行清洁

即使PHP环境被垃圾收集为:Java、.Net和其他编程环境,也欢迎进行一些良好的内部清理,并帮助您更好地控制编程逻辑

在返回非void函数值的函数中使用try语句时,将异常结果赋给局部变量,并将骰子转移到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);
    }
}

干杯。

我在使用上述代码时遇到的主要问题是显示搜索结果。如果我没有看到某些问题,请告诉我。您可以随时编辑您的问题。目前它确实需要它,因为它不清楚你的问题是什么。绑定应该在执行3之前进行。对于查询中的绑定,必须提供占位符。执行SELECT*from-使其呼吸SELECT*from不会获得任何字节