PDO将一个结果作为INT返回,并根据返回的结果更新记录

时间:2016-11-07 01:32:48

标签: php mysql pdo

我试图在数据库中找到一个整数,然后根据该整数更新一组记录。提交表单时我没有收到任何错误,但数据库中的值保持为0,而不是找到的code_id

形式:

<form class="form-inline" method="POST" enctype="multipart/form-data>
            <div class="form-group">
                <label for="address">Have a Coupon Code?</label>
                <input type="text" class="form-control" id="code" name="code" placeholder="Enter code here">
                <input type="hidden" id="userid" name="userid" value="',$user_id,'">
                <button class="btn btn-primary" type="submit" name="add_coupon" value="Apply Code">Apply Code</button>
            </div>
            </form>

if(isset($_POST['add_coupon']))
{
    $user_id    = $_POST['userid'];
    $codeinput  = $_POST['code'];
    $code->apply_coupon($user_id, $codeinput);
    header("location:basket.php?codeadded");
}

类功能:

public function apply_coupon($user_id, $codeinput)
     {
       try
       {
            $getcode = $this->db->prepare("SELECT code_id FROM codes WHERE name = :code LIMIT 1");
            $getcode->bindparam(":code", $codeinput); 
            $getcode->execute(); 
            $result = $getcode->fetchColumn(1);

            $applycode = $this->db->prepare("UPDATE basket SET code_id = :result WHERE user_id = :user_id");
            $applycode->bindparam(":user_id", $user_id); 
            $applycode->bindparam(":result", $result, PDO::PARAM_INT); 
            $applycode->execute(); 
            return true;
       }
       catch(PDOException $e)
       {
           echo $e->getMessage();
       }    
    }

1 个答案:

答案 0 :(得分:1)

PDOStatement::fetchColumn使用zero-based index。您只询问了一个包含查询的列。

SELECT code_id FROM codes

但您实际上是通过询问1

从该结果集中请求第二个
$result = $getcode->fetchColumn(1);

该指数不存在。所以至少,你需要将其改为零。

$result = $getcode->fetchColumn(0);

或者甚至更好,我喜欢通过询问关联索引来明确。

$result = $getcode->fetch(PDO::FETCH_ASSOC)['code_id'];