首页 > 解决方案 > 如何使用创建的数据库类从 MySQL 数据库中查询数据

问题描述

我很难选择数据,甚至在使用类时将数据放入我的数据库中。这里有两个例子,一个有效(没有类),另一个没有(有类)。
让我们从有效的开始。在文件名index1.php中,我们有这些代码行。

$con = new PDO("mysql:host=localhost;dbname=database","user","pass"); 
echo "Connection success "; 

$sql = "SELECT email FROM users WHERE email=:email";
$email= "mail@gmail.com";
$stmt = $con->prepare($sql);
//var_dump($stmt);
$stmt->bindParam(":email", $email, PDO::PARAM_STR);
$stmt->execute();
$count = $stmt->rowCount();
echo $count;

这将返回 $count = 2,这是真的。我在数据库中有 2 个用户mail@gmail.com作为电子邮件。

现在到了不起作用的情况。这是文件Database.php

<?php
 class Database{
        protected $pdo;
        protected static $instance; 
        
        protected function __construct(){
            $this->pdo = new PDO("mysql:host".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS);
            echo "success"; 
        }

 public static function instance(){
               if(self::$instance===null){
                  self::$instance = new self;
              }
              return self::$instance; 
            }

 public function __call($method, $args){
     return call_user_func_array(array($this->pdo, $method), $args);
       }  
    }
?>

我在文件中使用它index2.php

define("DB_HOST", "localhost");
define("DB_USER", "user");
define("DB_PASS", "pass");
define("DB_NAME", "database");

include_once "Database.php";

$pdo = Database::instance();

$sql = "SELECT email FROM users WHERE email=:email";
$email = "mail@gmail.com";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(":email", $email, PDO::PARAM_STR);
$stmt->execute();
$count = $stmt->rowCount();
echo $count;

这个 $count 返回0。而且我没有收到任何错误。我使用var_dump() and $stmt->debugDumpParams()但找不到问题所在)。难道我做错了什么 ?

标签: phpmysqlpdo

解决方案


推荐阅读