Php OOP:用于检查值是否在数据库中的函数

Php OOP:用于检查值是否在数据库中的函数,php,Php,我正在尝试创建一个用户管理系统类,我的功能之一是检查数据库中的列中是否有值。它什么也不返回 有关资料如下: require("opperators/connect.php"); class UserManagemen { protected $db; public function __construct(PDO $db) { $this->db = $db; } public function isInDatabase($checkIfThis, $isHere)

我正在尝试创建一个用户管理系统类,我的功能之一是检查数据库中的列中是否有值。它什么也不返回

有关资料如下:

require("opperators/connect.php");
class UserManagemen
{
protected $db;

public function __construct(PDO $db)
  {
    $this->db = $db;
  }
public function isInDatabase($checkIfThis, $isHere)
  {
    $stmt = $db->prepare("SELECT 1 from users WHERE $isHere = :$isHere");
    $stmt->execute(array(':$isHere' => $checkIfThis));
        if ($stmt->rowCount() > 0) {
        echo "It's in the database";
        } else {
        echo "Not in the database and you are good to go!";
        }
   }
}
$usermanagement = new UserManagemen($db, null, null, null);
$usermanagement->isInDatabase(Batman, username);
在connect.php中:这在我的过程编码测试中起作用

$configurator['database'] = array(
'username' =>   'root',
'password' =>   'root',
'host' =>    'localhost',
'db' =>    'girlscouts',
);
$options  = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);
try {
$db = new PDO("mysql:host={$configurator['database']['host']};dbname={$configurator['database']['db']};charset=utf8", $configurator['database']['username'], $configurator['database']['password'], $options);
}
catch (PDOException $ex) { 
die("Failed to connect to the database: " . $ex->getMessage());
}
如果有人反复问我这个问题,我会提前道歉。我试过谷歌,但没有返回任何有价值的信息,可能是因为我不知道该用谷歌做什么。我不太喜欢寻求帮助,但我会试试看

我想应该是这样

if ($stmt->rowCount() > 0) { // data available
    echo "It's in the database";
} else {
    echo "Not in the database and you are good to go!";
}
$this->db = new PDO(...);
而不是

if ($stmt->rowCount() > 0) {
    echo "Not in the database and you are good to go!";
} else {
    echo "It's in the database";
}
另外,您没有像
newpdo(…)那样初始化
PDO
,在构造函数中应该是

if ($stmt->rowCount() > 0) { // data available
    echo "It's in the database";
} else {
    echo "Not in the database and you are good to go!";
}
$this->db = new PDO(...);
你应该像这样使用它

$stmt=$this->db->prepare(...);
$stmt->execute(...);

查看和了解详细信息。

您做错了

若这样的值已经存储在表中,那个么您应该在列上设置
UNIQUE
约束,而不是仅仅为了查看而发出额外的请求。然后,如果已正确设置PDO实例,则尝试插入副本将引发
PDOException
,然后您可以以任何方式处理该异常

另外,
UNIQUE
约束允许您在MySQL中执行
。。重复更新时..
构造


要了解有关PDO使用的更多信息,请阅读。似乎您正在模拟准备好的语句。

您不需要WHERE子句中的
=
吗?再加上anrewsi所说的,php错误报告似乎已关闭,否则它会告诉您查询中有错误。然后,您可以使用php找出问题所在,并得出与andrewsi相同的结论。当然可以!修复并测试了它。虽然还没有改变最终结果,但这确实是一个必要的改变,证明我需要更多的咖啡。@rococopolkadtbandit-事实上。。。我认为你的
if
陈述是错误的。如果您的查询返回行,那么您已经找到了数据,但您当前正在回显“Not in the database”行。如果是,则修复了If语句。我将研究什么是错误报告以及如何打开它。谢谢!修复了它,但它仍然没有返回任何内容。@rococopolkadtbandit,。我得到了它,就像在我的介绍文章中一样。我不知道这些字段是否是必需的,所以我只在那里输入null。谢谢,我的连接完全错误,您可能锁定了错误。在短暂的休息后,我必须重新开始,但你帮了我的忙,我相信我会让它工作起来的。非常感谢您的快速回复。我刚开始使用PHP几个星期,它已经走出了我的图形设计师的舒适区。我正在尝试使用准备好的语句,用户名是用户输入,试图保护数据库而不需要任何白名单,因为我希望我的用户能够使用unicode字符,如š和撇号。我对这一切都是难以置信的陌生,所以如果我没有任何意义,我承认我很早就无知了。Unicode和特殊字符的使用对于页面的设计至关重要。