1

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

以下是相关信息:

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

如果这被反复询问,我提前道歉,我已经尝试了谷歌但没有返回任何有价值的东西,可能是因为我不知道谷歌是什么。我不喜欢寻求帮助,但我会试一试。

4

2 回答 2

0

你这样做是不对的。

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

此外,UNIQUE约束会让你在 MySQL 中执行.. ON DUPLICATE UPDATE .. 构造。

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

于 2012-10-24T00:01:12.950 回答
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";
}

你也没有初始化PDOlike new PDO(...);,在你的构造函数中它应该是

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

你应该像这样使用它

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

看看thisthis了解详情。

于 2012-10-23T17:30:48.280 回答