Cha*_*per 2 php pdo if-statement insert prepared-statement
我正在尝试从 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();
}
Run Code Online (Sandbox Code Playgroud)
这是原始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();
}
Run Code Online (Sandbox Code Playgroud)
为了简化事情,我删除了大部分变量(因为代码是相同的)
有多种方法可以检查 INSERT 是否正常工作。
正如您所说,$stmt->execute();成功时返回 true 或失败时返回 false。所以你可以使用:
$result = $stmt->execute();
if ($result) {...}
Run Code Online (Sandbox Code Playgroud)
rowCount 将返回受查询影响的行数。成功插入后,这应该是 1。
$stmt->execute();
$affected_rows = $stmt->rowCount();
if ($affected_rows == 1) {...}
Run Code Online (Sandbox Code Playgroud)
如果您的表有 ID 列,您可以使用 返回最后插入的行的 ID lastInsertId()。
$stmt->execute();
$newCustomerInfoId = $pdo->lastInsertId();
if ($newCustomerInfoId) {...}
Run Code Online (Sandbox Code Playgroud)
注意:您必须调用lastInsertIdPDO 对象,而不是$stmt.