2017-08-16 73 views
-1

我一直试图让这个语句更新我的分贝,但没有成功。我有一个表单允许用户更新他们的用户名和电子邮件。我忽略了什么?PDO准备好语句更新不起作用

这里是我的发言:

<?php require_once('config.php'); 
    $id= $_SESSION['id'];//get user id you can use session also 
    if (isset($_POST['submit'])){ 
     $username = $_POST['username']; 
     $email = $_POST['email']; 
       $query = "UPDATE members SET username = :username ,email = :email WHERE id = :id"; 
      $stmt = $db->prepare($query); 
      $stmt->bindParam(':username',$username, PDO::PARAM_STR); 
      $stmt->bindParam(':email', $email, PDO::PARAM_STR); 
     } 

    $query = "SELECT * FROM members WHERE id = $id"; //Get user info 
    $stmt = $db->prepare($query); 
    $stmt ->execute(); 
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
    if ($result) { 
     // output data of each row 
    foreach($result as $row){ 
     $username = $row['username']; 
     $email = $row['email']; 

     } 

    } 
?> 

这里是我的形式:

<form role="form" class="cf-form floating-labels" method="post" action="<?php filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_FULL_SPECIAL_CHARS); ?>"> 
    <fieldset> 
     <legend>My Account<br />   
     <img class="logo_contact" src="img/jobmiser_logo2.png" alt="jobmiser logo" /> 
     </legend> 
     <div class="icon"> 
      <label class="cf-label" for="username">Username</label> 
      <input class="user" type="text" name="username" id="username" value="<?php echo $username ?>" tabindex="2" required /> 
     </div> 
     <div class="icon"> 
      <label class="cf-label" for="email">Email</label> 
      <input class="email" type="email" name="email" id="email" value="<?php echo $email ?>" tabindex="3" required /> 
     </div> 
    </fieldset> 
    <fieldset> 
     <div class="icon"> 
     <input name="submit" type="submit" value="Update" /> 
     </div> 
    </fieldset> 
</form> 
+0

考虑加入一些代码来登录或发出错误信息,这是一个有点可疑看到您的SQL语句三个占位符,只有2'bindParam's ... – fvu

+2

看来你'UPDATE members'查询缺少“:id”的绑定,你永远不会执行它!? – xander

回答

0

您需要的绑定:id参数在您更新查询:

// bind :id 
$stmt->bindParam(':id', $id, PDO::PARAM_INT); 
// You also need to execute it 
$stmt ->execute(); 

在第二个语句你也应该绑定值的id,而不是直接插入到字符串中。

// BAD 
$query = "SELECT * FROM members WHERE id = $id"; 

// GOOD 
$query = "SELECT * FROM members WHERE id = :id"; //Get user info 
$stmt = $db->prepare($query); 
$stmt->bindParam(':id', $id, PDO::PARAM_INT); 
$stmt ->execute();