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

时间:2012-10-23 17:23:18

标签: php

我正在尝试创建一个用户管理系统类,我的一个功能是检查一个值是否在数据库的列中。它根本不返回任何内容。

以下是相关信息:

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

如果反复询问我,我提前道歉,我尝试了谷歌但没有返回任何有价值的东西,可能是因为我不知道该怎么去谷歌。我寻求帮助并不大,但我会试一试。

2 个答案:

答案 0 :(得分:0)

我认为应该是

if ($stmt->rowCount() > 0) { // data available
    echo "It's in the database";
} else {
    echo "Not in the database and you are good to go!";
}

而不是

if ($stmt->rowCount() > 0) {
    echo "Not in the database and you are good to go!";
} else {
    echo "It's in the database";
}

此外,您没有初始化PDO,如new PDO(...);,在您的构造函数中它应该是

$this->db = new PDO(...);

你应该像

一样使用它
$stmt=$this->db->prepare(...);
$stmt->execute(...);

请查看thisthis了解详情。

答案 1 :(得分:0)

你做错了。

如果要将这样的值存储在表中,您应该在列上设置UNIQUE约束,而不是仅仅为了查看附加请求。然后,如果您已正确设置PDO实例,则插入重复项的尝试将会增加PDOException,然后您可以按照您想要的任何方式处理。

UNIQUE约束也可以让你在MySQL中执行.. ON DUPLICATE UPDATE ..构建。

要了解有关PDO使用的更多信息,请阅读this tutorial。好像你正在模仿预备语句