2016-02-28 98 views
0

我有一個MySQL嵌套查詢,我想在PDO中運行。當我在phpmyAdmin控制檯中運行查詢時,它會成功執行。但它不會在php文件中使用pdo代碼執行。使用PDO運行嵌套MySQL查詢

下面

是代碼:

try{ 

    $dbh->beginTransaction(); 
    $stmt2 = $dbh->prepare("INSERT INTO `members`(`username`, `email`, `password`, `time_created`) 
    VALUES (:username , :email , :password , NOW()); 
    INSERT INTO `members_groups` (`member_id` , `group_id`) 
    VALUES((SELECT MAX(member_id) FROM members) , 
    (SELECT group_id FROM groups WHERE permission = 0)) 
      "); 

$stmt2->bindParam('username', $username , PDO::PARAM_STR); 
$stmt2->bindParam(':email', $email , PDO::PARAM_STR); 
$stmt2->bindParam(':password', $password , PDO::PARAM_STR);  
    if($stmt2->execute()){ 
    $dbh->commit(); 
    echo "registered successfully";    
    } 
    } 
catch (Exception $e){ 
    $dbh->rollback(); 
    echo "an error has occurred"; 
    }  

當我運行它說成功運行,但沒有進入表中的代碼

回答

0

您似乎忘記了第一次bindParam調用中參數名稱開頭的':'。

另外,我有點懷疑PDO :: prepare可以處理多個語句。你應該把它分成兩個單獨準備和執行的語句。

0

,如果你在groups有超過一排你的查詢應失敗匹配WHERE條件。該版本至少應該正確分析:

INSERT INTO `members_groups`(`member_id` , `group_id`) 
    SELECT m.member_id, g.group_id 
    FROM (SELECT MAX(member_id) as member_id FROM members 
     ) m CROSS JOIN 
     (SELECT group_id 
      FROM groups 
      WHERE permission = 0 
     ) g; 

但是,你仍然可以得到一個重複鍵錯誤,如果遇到你重複,你有一個唯一性約束。