2016-07-22 77 views
0

我在这里遇到问题。我不断收到这个绑定变量数量与令牌数量不匹配的错误。我仔细检查我的代码,似乎没有错误。无论如何,我是这些PDO的新手。无法运行查询:SQLSTATE [HY093]:无效的参数编号:绑定变量的数量与令牌数量不匹配

这是我的代码怎么称呼从数据库中的数据形式

if(isset($_GET['idstudent'], $_GET['idbook'])){ 
$_SESSION['link']=$_GET['idstudent']; 
$_SESSION['link2']=$_GET['idbook']; 
$sessionidstudent = $_SESSION['link']; 
$sessionidbook = $_SESSION['link2']; } 


$query = " 
    SELECT 
     * 
    FROM viewlibrary 
    WHERE 
     id = :sessionidstudent AND 
     serialno = :sessionidbook 

"; 

$query_params = array( 
    ':sessionidstudent' => $_SESSION['link'], 
    ':sessionidbook' => $_SESSION['link2'] 
); 

try 
{ 
    $stmt = $db->prepare($query); 
    $result = $stmt->execute($query_params); 
} 
catch(PDOException $ex) 
{ 
    die("Failed to run query: " . $ex->getMessage()); 
} 
$r=$stmt->fetch(PDO::FETCH_ASSOC); ?> 

呼应这是我的HTML代码

<form action="editpage.php" method="post" class="login, reminder"> 
<p>Student Matric Number: 
    <input type="text" class="login-input" name="addmatricno" id="addmatricno" value="<?php echo $r['matricno'] ?>" placeholder="Enter student matric number"> 
    Student Name: 
    <input type="text" class="login-input" name="addname" id="addname" value="<?php echo $r['studentname'] ?>" placeholder="Enter student name"> 
    Programme: 
    <input type="text" class="login-input" name="addprogramme" id="addprogramme" value="<?php echo $r['programme'] ?>" placeholder="Enter student programme"> 
    Education Level: 

    <?php 

     if($r['education_level'] == "PHD"){ 
      echo '<select name="selectedulevel" id="selectedulevel" class="login-input">'; 
      echo '<option disabled>Please select education level</option>'; 
      echo '<option value="PHD" selected>PHD</option>'; 
      echo '<option value="MASTER">MASTER</option>'; 
      echo '<option value="PHD">DEGREE</option></p></select>'; 
     } 
     else if($r['education_level'] == "MASTER"){ 
      echo '<select name="selectedulevel" id="selectedulevel" class="login-input">'; 
      echo '<option disabled>Please select education level</option>'; 
      echo '<option value="PHD">PHD</option>'; 
      echo '<option value="MASTER" selected>MASTER</option>'; 
      echo '<option value="PHD">DEGREE</option></p></select>'; 
     } 
     else{ 
      echo '<select name="selectedulevel" id="selectedulevel" class="login-input">'; 
      echo '<option disabled>Please select education level</option>'; 
      echo '<option value="PHD">PHD</option>'; 
      echo '<option value="MASTER">MASTER</option>'; 
      echo '<option value="PHD" selected>DEGREE</option></p></select>'; 
     } 

    ?> 
    <input type="submit" name="updatestudent" id="updatestudent" value="Update Student" class="login-submit" style = "width: 20%; text-align: center"> 

最后但并非最不重要的,我的查询代码。

$query = " 
     UPDATE student 
      SET 
       matricno = :addmatricno, 
       studentname = :addname, 
       programme = :addprogramme, 
       education_level = :selectedulevel 
      WHERE 
       id = :sessionidstudent 
    "; 

    $query_params = array( 
     ':addmatricno' => $_POST['addmatricno'], 
     ':addname' => $_POST['addname'], 
     ':addprogramme' => $_POST['addprogramme'], 
     ':selectedulevel' => $_POST['selectedulevel'] 
    ); 

    try 
    { 
     // Execute the query to create the user 
     $stmt = $db->prepare($query); 
     //$stmt->bindValue(':sessionidstudent',$sessionidstudent); 
     $result = $stmt->execute($query_params); 
    } 
    catch(PDOException $ex) 
    { 
     // Note: On a production website, you should not output $ex->getMessage(). 
     // It may provide an attacker with helpful information about your code. 
     die("Failed to run query: " . $ex->getMessage()); 
    } 


    // This redirects the user back to the login page after they register 
    echo '<script language="javascript">'; 
    echo 'alert("Info updated successful.")'; 
    echo '</script>'; 
    header("Refresh: 0; updatebooks.php"); 
    die(); 

注:$ DB是指$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);这里我把其他的文件,我可以肯定,我的数据库连接有一点问题都没有。 我检查了我的代码很多次,但仍然得到相同的错误。

+0

忘记更新查询bind'sessionidstudent'! – Saty

+0

是的,我忘了。抱歉。尴尬。虽然我不知道WHERE子句后面的变量也需要放在查询参数中。 – AhKing

回答

1

在查询参数变量,你忘了加上:sessionidstudent更新查询,添加和错误将会消失

+0

.....哦,这很尴尬。我不应该发布这个问题。不过多亏了你,至少我知道WHERE子句后面的变量也需要放在查询参数中。我不知道。感谢和抱歉的问题:) – AhKing

+0

这很好,不客气,如果它确实解决了您的问题,请点击复选标记图标将您的问题标记为已回答!祝你今天愉快! – FMashiro

相关问题