Ошибка в mysql_insert_id() [MAIL TAG]
$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 в почтовом ящике.
2 ответа
Согласно инструкции, mysql_insert_id()
вернусь 0
если последнее утверждение не генерирует AUTO_INCREMENT
значение:
Идентификатор, сгенерированный для столбца AUTO_INCREMENT предыдущим запросом в случае успеха, 0, если предыдущий запрос не генерирует значение AUTO_INCREMENT, или FALSE, если не установлено соединение MySQL.
Вы впервые используете 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-инъекциям; Вы не избегаете ни одного из значений. Вместо того, чтобы вдаваться в то, что такое SQL-инъекция, я бы скорее рекомендовал вам использовать подготовленные операторы.
Кроме того, PHP осуждает mysql_
методы в пользу mysqli_
а также PDO
методы. Обе эти поддержки подготовили заявления, и я бы порекомендовал вам изучить их.
Тем временем, пожалуйста, подумайте об обёртывании ваших переменных mysql_real_escape_string()
, такие как:
... values ('" . mysql_real_escape_string($username) . "', ...
Вы не сделали запрос, пока не отправите письмо, mysql_insert_id
дает идентификатор, сгенерированный для столбца AUTO_INCREMENT по предыдущему запросу, так что вам придется разместить запрос на одну позицию перед использованием mysql_insert_id