我正在尝试创建一个用户管理系统类,我的一个功能是检查一个值是否在数据库的列中。它根本不返回任何内容。
以下是相关信息:
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());
}
如果反复询问我,我提前道歉,我尝试了谷歌但没有返回任何有价值的东西,可能是因为我不知道该怎么去谷歌。我寻求帮助并不大,但我会试一试。
答案 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(...);
答案 1 :(得分:0)
你做错了。
如果要将这样的值存储在表中,您应该在列上设置UNIQUE
约束,而不是仅仅为了查看附加请求。然后,如果您已正确设置PDO实例,则插入重复项的尝试将会增加PDOException
,然后您可以按照您想要的任何方式处理。
UNIQUE
约束也可以让你在MySQL中执行.. ON DUPLICATE UPDATE ..
构建。
要了解有关PDO使用的更多信息,请阅读this tutorial。好像你正在模仿预备语句。