MySQLがPDOとストアドプロキシを使用して挿入しない

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

テーブルのプロパティを表示すると、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);
0
データは正しく格納されたprocに渡され、渡すものを選択してすべてを表示します。私がLAST_INSERT_ID()を選択すると、増分されます。動作しているようです。しかし、テーブルを開くと、データはそこにはありません。
追加された 著者 dzm,
私はあなたがいくつかのコードと例を示す必要があると思います
追加された 著者 Pekka 웃,
うーん。したがって、PDOを使用してクエリに入力するデータが欠落していますか?最初にそこにいると確信していますか?
追加された 著者 Pekka 웃,

1 答え

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