2016-07-22 3 views
0

Ich habe ein Problem hier. Ich bekomme diesen Fehler, der Anzahl der gebundenen Variablen stimmt nicht mit der Anzahl der Token überein. Ich überprüfe meinen Code und scheint keinen Fehler zu haben. Wie auch immer, ich bin neu in dieser PDO-Sache.Fehler beim Ausführen der Abfrage: SQLSTATE [HY093]: Ungültige Parameternummer: Anzahl der gebundenen Variablen stimmt nicht mit der Anzahl der Token überein

Dies ist der Code, wie ich die Daten aus der Datenbank aufrufen in Form Code mein HTML

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); ?> 

Dies ist

<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"> 

Last but not least Code meine Abfrage Echo.

$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(); 

Anmerkung: $ db $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); verweisen, wo ich auf andere Datei setzen, und ich kann meine Verbindung zur Datenbank hat kein Problem alles andere als sicher. Ich habe meinen Code viele Male überprüft, bekomme aber immer noch den gleichen Fehler.

+0

Forget in Update-Abfrage bind'sessionidstudent' weg !! – Saty

+0

Ja, ich habe das vergessen. Es tut uns leid. peinlich. Obwohl ich nicht wusste, dass die Variable nach der WHERE-Klausel auch in Abfrageparameter eingefügt werden muss. – AhKing

Antwort

1

In der Abfrage params Variable Sie die :sessionidstudent in der Update-Abfrage hinzuzufügen vergessen, hinzuzufügen, dass, und der Fehler wird

+0

..... oh das ist peinlich. Ich sollte dieses Problem nicht veröffentlichen. Aber dank dir weiß ich zumindest, dass diese Variable nach der WHERE-Klausel auch in Abfrageparameter eingefügt werden muss. Ich wusste das nicht. Danke und Entschuldigung für das Problem :) – AhKing

+0

Es ist in Ordnung, Gern geschehen, wenn es Ihr Problem behoben hat, klicken Sie auf das Häkchen-Symbol, um Ihre Frage als beantwortet zu markieren! Einen schönen Tag noch! – FMashiro

Verwandte Themen