подготовленное заявление pdo не обновляет - PullRequest
1 голос
/ 08 апреля 2011

Это не похоже на обновление записи. Кто-нибудь может понять почему?

    try {
        $status = 'OK';
        $messId = 179981;
        #die(var_dump($messId, $this->campaignId, $this->userId, $status));
        $stmt = $this->dbh->prepare("UPDATE tbl_inbound_responses SET status = :status, sent = '1' WHERE fk_userId = :userId AND fk_campaignId = :campId AND pk_messageId = :messId") or die("Prepare Error");
        $stmt->bindParam(':userId', $this->userId);
        $stmt->bindParam(':campId', $this->campaignId);
        $stmt->bindParam(':messId', $messId);
        $stmt->bindParam(':status', $status);
        $stmt->execute();

        #var_dump($stmt->debugDumpParams(), $stmt->errorInfo());

        if($err = $stmt->errorInfo()) {
            if($err[0] != '00000') {
                var_dump($stmt->debugDumpParams());
            }
        }               

    }
    catch(PDOException $e) {
        die($e->getMessage());
    }

Сценарий также имеет

$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

набор и

$stmt->debugDumpParams();

Отчеты:

SQL: [120] UPDATE tbl_inbound_responses SET status = :status, sent = '1' WHERE fk_userId = :userId AND fk_campaignId = :campId AND pk_messageId = :messId
Params: 4
Key: Name: [7] :userId paramno=-1 name=[7] ":userId" is_param=1 param_type=2
Key: Name: [7] :campId paramno=-1 name=[7] ":campId" is_param=1 param_type=2
Key: Name: [7] :messId paramno=-1 name=[7] ":messId" is_param=1 param_type=2
Key: Name: [7] :status paramno=-1 name=[7] ":status" is_param=1 param_type=2
NULL array(3) { [0]=> string(5) "00000" [1]=> NULL [2]=> NULL } 

Приветствие.

EDIT:

Я не верю, что это так же, как:

Обновление PHP PDO: проблема подготовленного оператора или Запрос подготовленного оператора PHP PDO не обновляет запись

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Если вы не получили исключение, то нет ничего плохого в запросе SQL или в том, как PDO его исказил. Наиболее вероятной причиной являются проблемы с параметрами. Так что попробуйте отладить это. Замените ваши ->bindParam звонки просто:

    $params = array(
         ':userId' => $this->userId,
         ':campId' => $this->campaignId,
         ':messId' => $messId,
         ':status' => $status,
    );
    var_dump($params);
    $stmt->execute($params);

Это может дать подсказку. Если это не удалось, попробуйте ? перечислимые параметры. В любом случае, повторно запустите тот же запрос с необработанными «строковыми значениями» в SQL для тестирования (в любом инструменте запроса по вашему выбору).

0 голосов
/ 10 июля 2014

проблема в вашем запросе!используйте «,» вместо «И»:

$stmt = $this->dbh->prepare("UPDATE tbl_inbound_responses SET status = :status, sent = 1 WHERE fk_userId = :userId, fk_campaignId = :campId, pk_messageId = :messId") or die("Prepare Error");
...