2016-11-07 3 views
0

データベースで整数を見つけようとしていて、その整数に基づいて一連のレコードを更新しようとしています。しかし私は、データベース内の値が代わりに見つかったcode_idの、0としてまま、フォームの送信時にすべてのエラーを得ることはありませんPDO 1つの結果をINTとして返し、返された結果に基づいてレコードを更新します。

フォーム:

<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

PDOStatement::fetchColumnは、zero-based indexを使用します。クエリで1つの列のみを要求しました。

SELECT code_id FROM codes 

しかし、あなたが実際にインデックスが存在しないことを1

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

を求めることにより、設定されている結果から列を要求しました。少なくとも、それをゼロに変更する必要があります。

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

さらに、私は連想インデックスを求めることで明示的に好きです。

$result = $getcode->fetch(PDO::FETCH_ASSOC)['code_id']; 
関連する問題