Я пытаюсь переключиться с инструкций mySql на подготовленные инструкции PDO, но мне трудно понять правильный синтаксис для операторов if / else, которые я должен использовать, если вставка была успешной (ранее if($result) {...}
).
Я знаю, что $ stmt-> execute (); возвращает true при успешном завершении или false при ошибке, но я не смог определить, как заставить оператор действовать.
Новый код (подготовленный отчет PDO)
$gender = $_POST['gender']; if ($gender==="female" ) { try { $stmt = $conn->prepare('INSERT INTO customer_info (fname...) VALUES(:fname...)'); $stmt->bindParam(':fname', $_POST['fname'], PDO::PARAM_STR); $stmt->execute(); } catch(PDOException $e) { echo $e->getMessage(); }
Это остальная часть оригинальной функции if ($gender==="female")
$result = @mysql_query($qry); if($result) { $qry="SELECT * FROM customer_info WHERE user_name='$_POST['user_name']' AND password='$_POST['password']'"; $result=mysql_query($qry); if($result) { if(mysql_num_rows($result) == 1) { //user_name Successful session_regenerate_id(); $member = mysql_fetch_assoc($result); $_SESSION['SESS_USER_ID'] = $member['user_id']; session_write_close(); header("location: flatter_iframe.html"); exit(); }else { header("location: login_failed.html"); exit(); }
Я удалил большинство переменных, чтобы упростить ситуацию (так как код тот же)
Существует несколько способов проверки правильности работы INSERT.
Как вы сказали, $stmt->execute();
возвращает true при успешном завершении или false при ошибке. Таким образом, вы можете использовать:
$result = $stmt->execute(); if ($result) {...}
PDO Выполнить документацию здесь
rowCount вернет число строк, связанных с запросом. После успешной вставки это должно быть 1.
$stmt->execute(); $affected_rows = $stmt->rowCount(); if ($affected_rows == 1) {...}
Документация PDO rowCount здесь
Если в таблице есть столбец идентификатора, вы можете вернуть идентификатор последней вставленной строки, используя lastInsertId()
.
$stmt->execute(); $newCustomerInfoId = $pdo->lastInsertId(); if ($newCustomerInfoId) {...}
Примечание. Вы должны вызвать lastInsertId
для объекта PDO, а не $stmt
.
Документация PDO lastInsertId здесь