2011-12-18 32 views
0

我使用PDO和存儲過程與MySQL(InnoDB)和由於某種原因數據沒有被插入 - 排序。MySQL不插入使用PDO和存儲Procs

當我查看錶格上的屬性時,每次運行Auto_increment時它都會上升,並且它會經歷無錯誤。最後,我選擇了我通過的變量,這很好。

但是,即使表格「遞增」,數據也不存在。如果我選擇它所說的auto_increment ID,我什麼也得不到。如果我選擇*並再次訂購desc,則不會顯示最新的。

任何想法可能導致這種情況?

謝謝!

這裏的存儲過程:

DELIMITER $$ 

USE `DB`$$ 
DROP PROCEDURE IF EXISTS `addVal`$$ 
CREATE DEFINER=`data`@`%` PROCEDURE `addVal`(

     v_val_accountid INT, 
     v_val_groupid INT, 
     v_val_validationtypeid INT, 
     v_val_validationstatusid INT, 
     v_val_key VARCHAR(255), 
     v_val_expirationdate DATETIME 

) 
MAIN:BEGIN 

     INSERT `Validation` (
      Val_AccountId, 
      Val_GroupId, 
      Val_ValidationTypeId, 
      Val_ValidationStatusId, 
      Val_Key, 
      Val_ExpirationDate 

     ) VALUES (
      v_val_accountid, 
      v_val_groupid, 
      v_val_validationtypeid, 
      v_val_validationstatusid, 
      v_val_key, 
      v_val_expirationdate 
     ); 

END$$ 

DELIMITER; 

這裏的PDO準備語句:

$key = '123456789'; 
    $group_id = 0; 
    $type_id = 2; 
    $status_id = 1; 
    $date = 'DATE_ADD(NOW(), INTERVAL 1 DAY)'; 

    $stmt = $this->db->prepare("CALL addVal(:account_id, :group_id, :type_id, :status_id, :key, :date)"); 

    $stmt->bindParam(':account_id', $account_id, PDO::PARAM_INT); 
    $stmt->bindParam(':group_id', $group_id, PDO::PARAM_INT); 
    $stmt->bindParam(':type_id', $type_id, PDO::PARAM_INT); 
    $stmt->bindParam(':status_id', $status_id, PDO::PARAM_INT); 
    $stmt->bindParam(':key', $key, PDO::PARAM_STR); 
    $stmt->bindParam(':date', $date, PDO::PARAM_STR); 
+1

我想你會需要顯示一些代碼和例子 – 2011-12-18 20:34:29

+0

謝謝 - 添加! – dzm 2011-12-18 21:03:24

+0

嗯。那麼您通過PDO輸入到查詢中的數據是否缺失?你確定它在那裏嗎? – 2011-12-18 21:08:58

回答

0

我覺得你得到了某種錯誤的存儲過程,因爲DATE_ADD(NOW(), INTERVAL 1 DAY)是一個函數,不串所以你不應該把它分配爲PDO :: PARAM_STR。

您可以在部分可能更改爲類似:

// REPLACE PARAMETER FROM PARAM TO ACTUAL DATA_ADD FUNCTION 
    $stmt = $this->db->prepare("CALL addVal(:account_id, :group_id, :type_id, :status_id, :key, DATE_ADD(NOW(), INTERVAL 1 DAY))"); 

... 

// COMMENT OUT BINDING 
// $stmt->bindParam(':date', $date, PDO::PARAM_STR); 

希望這有助於!

+0

謝謝,試過這個,仍然不起作用。我手動插入了一條新記錄到表格中,並自動遞增列,從5519跳到5540,其間的所有數字都來自我在這裏做的事情。它在遞增 - 但沒有實際的記錄。 – dzm 2011-12-18 21:25:06

+0

這聽起來像事務沒有承諾,當你從PHP做。它在'$ stmt-> bindParam(':date',$ date,PDO :: PARAM_STR)後面做了什麼?你運行實際的'$ stmt-> execute();'?如果你已經執行了,php或mysql配置爲自動提交? – mask8 2011-12-18 22:17:56