2

我正在尝试从 mySql 语句切换到 PDO 准备语句,但是如果插入成功(以前是if($result) {...}),我无法确定我必须使用的 if/else 语句的正确语法。

我知道 $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();
    }   

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

4

1 回答 1

5

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

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

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

$result = $stmt->execute();
if ($result) {...}

PDO 在此处执行文档

2. 行数

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

$stmt->execute();
$affected_rows = $stmt->rowCount();
if ($affected_rows == 1) {...} 

PDO rowCount 文档在这里

3. 最后插入的 ID

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

$stmt->execute();
$newCustomerInfoId = $pdo->lastInsertId();
if ($newCustomerInfoId) {...}

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

PDO lastInsertId 文档在这里

于 2012-12-12T11:39:05.397 回答