如果在 PDO 准备好的语句中插入成功,则 if/else 语句的语法

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)

为了简化事情,我删除了大部分变量(因为代码是相同的)

Jon*_*ler 5

有多种方法可以检查 INSERT 是否正常工作。

1. $stmt->execute() 的返回值

正如您所说,$stmt->execute();成功时返回 true 或失败时返回 false。所以你可以使用:

$result = $stmt->execute();
if ($result) {...}
Run Code Online (Sandbox Code Playgroud)

PDO 在此处执行文档

2. 行数

rowCount 将返回受查询影响的行数。成功插入后,这应该是 1。

$stmt->execute();
$affected_rows = $stmt->rowCount();
if ($affected_rows == 1) {...} 
Run Code Online (Sandbox Code Playgroud)

PDO rowCount 文档在这里

3. 最后插入的 ID

如果您的表有 ID 列,您可以使用 返回最后插入的行的 ID lastInsertId()

$stmt->execute();
$newCustomerInfoId = $pdo->lastInsertId();
if ($newCustomerInfoId) {...}
Run Code Online (Sandbox Code Playgroud)

注意:您必须调用lastInsertIdPDO 对象,而不是$stmt.

PDO lastInsertId 文档在这里