gpt4 book ai didi

php - mysql_insert_id() 中的错误 [邮件标签]

转载 作者:行者123 更新时间:2023-11-29 14:15:13 25 4
gpt4 key购买 nike

     $headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: contact@email.com';
$to = $email;
$subject = "Confirmation";
$message = "Hi, $username. You're registred in Site. Link for confirmation: http://site.com/confirm/**".mysql_insert_id()."**";
mail($to, $subject, $message, $headers);
$query = mysql_query("insert into usr_users(username, password, email, avator, pin) values('$username', '$password', '$email', '$img', '$pin')");
$query2 = mysql_query("insert into usr_confirm(user_name, user_id, active, data) values('$username', '".mysql_insert_id()."', '$active', '$senha')");
echo"Success!</br>";

第二个mysql_insert_id()(第9行)是正确的!但第一个 mysql_insert_id()(第 6 行)在电子邮件信箱中返回 0。

最佳答案

根据 manual ,如果最后一条语句没有生成 AUTO_INCRMENT 值,mysql_insert_id() 将返回 0:

The ID generated for an AUTO_INCREMENT column by the previous query on success, 0 if the previous query does not generate an AUTO_INCREMENT value, or FALSE if no MySQL connection was established.

在插入任何记录之前,您首先使用 mysql_insert_id() 调用,因此结果必须为 0 (除非你的代码中的其他地方在此之前有一个调用 - 那么你实际上会得到倾斜的结果)。尝试将与邮件相关的调用移至插入语句下方,为您提供:

// insert the records
$query = mysql_query("insert into usr_users(username, password, email, avator, pin) values('$username', '$password', '$email', '$img', '$pin')");
$query2 = mysql_query("insert into usr_confirm(user_name, user_id, active, data) values('$username', '".mysql_insert_id()."', '$active', '$senha')");

// send the email
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: contact@email.com';
$to = $email;
$subject = "Confirmation";
$message = "Hi, $username. You're registred in Site. Link for confirmation: http://site.com/confirm/**".mysql_insert_id()."**";
mail($to, $subject, $message, $headers);
echo"Success!</br>";

如果您在进行此更改后仍然收到错误,则需要确认 usr_confirm 表上的主键字段是否正确配置了 auto_increment。另外,如果设置正确,请尝试将连接变量传递给函数,例如 mysql_insert_id($conn); 其中 $conn 的结果>mysql_connect() 调用。

站点说明(未具体回答)
您的代码容易受到 SQL 注入(inject);您没有转义任何值。我宁愿指导您使用准备好的语句,而不是深入探讨什么是 SQL 注入(inject)。

此外,PHP 正在弃用 mysql_ 方法,转而使用 mysqli_PDO方法。这两个都支持准备好的陈述,我建议您研究一下这些。

在此期间,请考虑使用 mysql_real_escape_string() 包装变量,例如:

... values ('" . mysql_real_escape_string($username) . "', ...

关于php - mysql_insert_id() 中的错误 [邮件标签],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12806870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com