我正在尝试为学生注册页面编写一个脚本,学生在其中输入他/她的学生 ID,如果存在,则检索他/她的电子邮件并生成 token 并将 token 插入数据库,然后发送注册 url 链接,带有 token 和 id 到学生的电子邮件。由于我是 php 和 mysql 的初学者,我如何得到它。 我哪里出错了?
<?php
error_reporting(1);
session_start();
include 'includes/connect.php';
include 'includes/tokengenerator.php';
if ($_POST["Submit"] == "Submit") {
$stu_id = $_POST['stu_id'];
$sql = "SELECT email FROM people WHERE stu_id = :stu_id";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':stu_id', $stu_id);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if (!empty($result)) {
$email = $result['email'];
//echo $email;
//exit();
for ($i = 1; $i <= 2; $i++) {
$token = generateToken();
//echo $token;
$email = $result['email'];
$sql = "INSERT INTO students (token) VALUES ($token) WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(
':token' => $token,
));
$result1 = $stmt->fetch(PDO::FETCH_ASSOC);
}
} else {
echo 'Please Contact principal for student ID';
}
}
?>
最佳答案
您在查询中绑定(bind)了错误的值::token
与 :email
.
您实际上应该有 2 个占位符并绑定(bind)这两个值。
<罢工>罢工>
<罢工>$sql = "INSERT INTO students (token) VALUES (:token) WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(
':token' => $token,
':email' => $email
));
罢工><罢工>罢工>
正如 @Saty 所正确指出的,你不能拥有 WHERE
INSERT
上的条款声明:
$sql = "INSERT INTO students (token, email) VALUES (:token, :email)";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(
':token' => $token,
':email' => $email
));
或者您可能需要 UPDATE
语句而不是 INSERT
:
$sql = "UPDATE students SET token = :token WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(
':token' => $token,
':email' => $email
));
关于php - 如何生成 token 并创建 url 以发送到电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37132329/