我有以下代码:
$check = $dbh->prepare("SELECT * FROM BetaTesterList WHERE EMAIL = ?");
$check->execute(array($email));
$res = $check->fetchAll();
if (!($res['EMAIL'])){
$stmt = $dbh->prepare("INSERT INTO BetaTesterList(EMAIL) VALUES (?)");
$stmt->execute(array($email));
} else {
$return['message'] = 'exists';
}
然而,尽管该记录已存在于数据库中,但仍会插入该值。我该如何防止这种情况?
最佳答案
这里有几件事......
PDOStatement::fetchAll()
返回一个数组数组。要检查记录,请尝试if (count($res) == 0) { // no records found }
打开
E_NOTICE
错误。您应该知道$res['EMAIL']
是一个 undefined index 。在脚本的顶部...ini_set('display_errors', 'On'); error_reporting(E_ALL);
我建议在您的
EMAIL
列上创建唯一约束。这样,您将无法插入重复记录。如果有人尝试,PDO 将触发错误或抛出异常,具体取决于您如何配置PDO::ATTR_ERRMODE
属性(参见 http://php.net/manual/en/pdo.setattribute.php)如果您不愿意这样做,请考虑改用此查询...
$check = $dbh->prepare("SELECT COUNT(1) FROM BetaTesterList WHERE EMAIL = ?"); $check->execute(array($email)); $count = $check->fetchColumn(); if ($count == 0) { // no records found } else { // record exists }
关于php - 检查 PDO Fetch select 语句何时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7641934/