php - 使用 pdo 检查 2 个条件
问题描述
在这种情况下如何有两个条件?我也想检查电子邮件,而不仅仅是用户名。
$checkuser = htmlentities($_POST["username"]);
$data = $connect_pdo->prepare('SELECT username FROM users WHERE username = ?');
$data->bindParam(1, $checkuser);
$data->execute();
if ($data->rowCount() > 0) {
$linha = $data->fetch(PDO::FETCH_OBJ);
//user already exists
} else {
//execute query
}
我也需要检查电子邮件,而不仅仅是用户名,所以脚本中会有两个条件。有人可以帮忙吗?
另外,我想单独检查它们,因此我可以根据电子邮件或用户设置消息,例如“用户已存在”或“电子邮件已存在”,然后(如果不存在)然后运行执行。
解决方案
您只需要检查fetch()
,这是比使用更好的选择rowCount()
(因为这种方法在所有数据库中可能并不总是可靠的)。还要记住,它htmlentities()
可以改变数据,所以这不应该用于输入(如对数据库的查询),只能用于输出(在网站上打印数据时)。
您可以添加一个OR email = ?
条件,并单独绑定它。
如果要检查一个或两个值是否存在,可以循环遍历结果集并设置一个值,如果查询中使用的值与数据库中的值匹配。然后您可以相应地打印它们。
$matches_found = [];
$data = $connect_pdo->prepare('SELECT username, email FROM users WHERE username = ? OR email = ?');
$data->execute([$_POST["username"], $_POST["email"]]);
if ($row = $data->fetch(PDO::FETCH_OBJ)) {
do {
if ($row->username == $_POST['username']) {
$matches_found['username_exists'] = 'username';
}
if ($row->email == $_POST['email']) {
$matches_found['email_exists'] = 'email';
}
} while ($row = $data->fetch(PDO::FETCH_OBJ));
echo "The ".implode(" and ", $matches_found)." already exists.";
} else {
//execute query
}
请注意,这可能容易出现竞争条件 - 第一个查询返回 0 个结果,但数据在插入查询发生之前的非常短的时间窗口内被插入到数据库中。
推荐阅读
- fonts - 启用 ClearType 的字体工件
- kubernetes - 如何使用 rkt 作为容器运行时而不是 docker 用于 kubernetes?
- vuejs2 - 换页时 Nuxt JS 页面内容闪烁
- opencv - Plt 绘制到 OpenCV 图像/Numpy 数组
- kubernetes - 我可以用原生 kubernetes 消息队列替换 RabbitMQ
- sql - 从列中统计 7 和 0 出现的次数
- flutter - 被键盘覆盖的底板
- java - 我如何将证书与 JAVA 中的 CSR 相匹配
- authorization - 在 XACML 2.0 策略中评估多值属性
- django - 如何为随机网址创建视图?