【发布时间】:2020-01-07 16:19:47
【问题描述】:
我是 PHP 中准备好的语句的新手,我想知道如何最好地检查一行是否已经存在,因为我在这个阶段似乎感到困惑:
<?php
include '../config.php';
$stmt = $conn->prepare("INSERT INTO users (email, password) VALUES (?, ?)");
$stmt->bind_param("ss", $email, $password);
if(mysqli_num_rows($stmt) > 0) {
$email = $_POST['email'];
$password = $_POST['password'];
$stmt->execute();
header('Location: ../login.php');
} else {
echo 'user already exists';
}
$stmt->close();
$conn->close();
?>
上面返回else 语句,如果我切换它们,它将再次插入,使用else 语句并插入记录但仍然不检查。
** 更新 **
这是我的更新代码,您可以在下面获得帮助后查看..
<?php
include '../config.php';
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
$email = $_POST['email'];
$password = $_POST['password'];
$stmt_check = $conn->prepare("SELECT * FROM users WHERE email =?");
$stmt_check->bind_param("s", $email);
$stmt_check->execute();
if($stmt_check->num_rows > 0) {
echo 'user already exists';
} else {
$stmt = $conn->prepare("INSERT INTO users (email, password) VALUES (?, ?)");
$stmt->bind_param("ss", $email, $password);
$stmt->execute();
// header('Location: ../login.php');
}
$stmt->close();
$conn->close();
?>
【问题讨论】:
-
准备好的语句不会改变任何东西。你会完全按照以前的方式来做。参数绑定只是防止SQL注入的工具。
-
这是我的目标,防止 SQL 注入。
-
请先检查,有没有返回值再使用条件 $stmt_check->execute(); $stmt_check->store_result(); $countRows = $stmt_check->num_rows;打印 $countRows;死;