2011-12-18 5 views
0

私はPDOとストアドプロシージャをMySQL(InnoDB)で使用しています。何らかの理由でデータが挿入されていません。PDOとストアドプロキシを使用してMySQLが挿入されない

テーブルのプロパティを表示すると、Auto_incrementが実行されるたびにエラーが発生します。最後に、私が渡している変数を選択しています。それはすべて良いことです。

ただし、「インクリメント」テーブルでもデータはありません。 auto_increment IDが何であるかを選択すると、何も得られません。 *を選択してdescを押すと、最新のものは表示されません。

何が原因なのですか?

ありがとうございます!私はDATE_ADD(NOW(), INTERVAL 1 DAY)は機能ではなく、文字列であるので、あなたがストアドプロシージャでエラーのいくつかの種類を取得していると思います

$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

私はあなたがいくつかのコードと例を示す必要があると思います –

+0

ありがとうございました! – dzm

+0

Hmm。したがって、PDOを使用してクエリに入力するデータが欠落していますか?最初にそこにいると確信していますか? –

答えて

0

:ここではPDO文を作成します

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 :: 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

+0

あなたがPHPからするとトランザクションのように聞こえるのはコミットされません。それは '$ stmt-> bindParam( ':date'、$ date、PDO :: PARAM_STR)の後に何をしますか?あなたは実際に '$ stmt-> execute();'を実行しますか?すでに実行している場合は、自動コミットするようにphpまたはmysqlが設定されていますか? – mask8

関連する問題