2011-08-25 4 views
0

マイ手続きを返したいMySQLはすでに正しく挿入を行います。私のmysqlの手順は、既に挿入し、私は最後に挿入IDに

これは、プロシージャを呼び出す私のPHPコードです:

$sql = 'CALL insert_menu(?,?,?,?,?)'; 
     try { 
        $query = $bd->prepare($sql); 
        $query->bindParam(1,$name, PDO::PARAM_STR); 
        $query->bindParam(2,$catsup, PDO::PARAM_INT); 
        $query->bindParam(3,$level, PDO::PARAM_INT); 
        $query->bindParam(4,$link, PDO::PARAM_STR); 
        $query->bindParam(5,$title, PDO::PARAM_STR); 
        $query->execute(); 
     } catch (PDOException $e) { 
       echo $e->getMessage(); 
     } 

と、これはあります私の手順:

CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_menu`(
IN p_cat_name VARCHAR(100), 
IN p_cat_sup_cod INT, 
IN p_cat_level INT, 
IN p_link VARCHAR(200), 
IN p_title VARCHAR(100) 
) 
BEGIN 
IF ((p_cat_name <> '')&&(p_cat_level <> '')&&(p_link <> '')&&(p_title <> '')) THEN 
INSERT INTO access (access_id,menu_descr,sup_cod,level,menu_link,menu_title) 
VALUES ('',p_cat_name,p_cat_sup_cod,p_cat_level,p_link,p_title); 
END IF; 
END; 

私は私の手順は、PHPに最後に挿入IDを返すことを希望... 私も準備PDOで結果を取得する方法がわかりませんあなたはPDOを使用しているので

SELECT LAST_INSERT_ID() 

答えて

0

:... 私は

+0

LOS_INSERT_ID()はストアされたprocトランザクション内で実行され、yoあなたはストアドプロシージャによって挿入されたレコードのIDを取得していますか? –

+0

2つの間でクエリを実行する可能性があります。あなたが言及したように、あなたは 'beginTransation()'と 'commit()'で2つをラップするか、それらを一緒に実行することができます。 –

0

はこれを試してみてください...、すべての人の助けを頼むありがとう

try { 
    $bd->prepare('SELECT LAST_INSERT_ID()'); 
    $bd->execute(); 
} catch(PDOException $e) { 
    echo $e->getMessage(); 
} 

しかし、これは本当に必要はありません準備するので、ちょうど使用することができます:

try { 
    $results = $bd->query('SELECT LAST_INSERT_ID() as last'); 
    $lastID = $results[0]['last']; 
} catch(PDOException $e) { 
    echo $e->getMessage(); 
}