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


PDO Return one result as INT and update records based on returned result

我试图在数据库中找到一个整数,然后根据该整数更新一组记录。在提交表单时,我没有得到任何错误,但是数据库中的值保持为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();
       }    
    }

PDOStatement::fetchColumn使用从零开始的索引。您的查询只请求了一列。

SELECT code_id FROM codes

但是你实际上是通过请求1

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

这个索引不存在。所以至少,你需要把它改为0。

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

或者更好的是,我喜欢明确地要求关联索引

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