2

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();
    }   

物事を単純化するためにほとんどの変数を削除しました(コードが同じであるため)

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) {...} 

PDOrowCountのドキュメントはこちら

3.最後に挿入されたID

テーブルにID列がある場合は、を使用して最後に挿入された行のIDを返すことができますlastInsertId()

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

lastInsertId注:ではなく、PDOオブジェクトを呼び出す必要があります$stmt

PDOlastInsertIdのドキュメントはこちら

于 2012-12-12T11:39:05.397 に答える