MySQL не вставляется с использованием PDO и хранимых процедур - PullRequest
0 голосов
/ 19 декабря 2011

Я использую 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);

1 Ответ

0 голосов
/ 19 декабря 2011

Я думаю, что вы получаете какую-то ошибку в хранимой процедуре, потому что 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);

Надеюсь, это поможет!

...