2016-07-21 13 views
0

Ich verwende derzeit PDO, um eine Verbindung zu meiner Datenbank herzustellen, und es funktioniert, aber wenn ein Benutzer anmeldet, möchte ich überprüfen, ob die ID des Benutzers bereits in einer Reihe ist, habe ich bereits getan in dem folgenden Code:PDO Insert funktioniert nicht mit bindParam

<?php 
require 'steamauth/steamauth.php'; 

if(!isset($_SESSION['steamid'])) { 

$username = "Unknown"; 
$avatar = "defaultUser"; 
$accid = "Unknown"; 

$credits = "Not Applicable"; 

$avatarSmall = "smallUser"; //For Dashboard 

} else { 

include ('steamauth/userInfo.php'); 

$username = &$steamprofile['personaname']; 
$avatar = &$steamprofile['avatarmedium']; 
$accid = &$steamprofile['steamid']; 

$avatarSmall = &$steamprofile['avatar']; //For Dashboard 

$db_user = "USERNAME"; 
$db_pass = "PASSWORD"; 
$db_host = "HOST"; 
$db_name = "DATABASE NAME"; 

$db = new PDO("mysql:host=".$db_host.";db_name=".db_name, $db_user, $db_pass); 

    try{ 
     $check = $db->prepare("SELECT userID from userData WHERE userID = :accountID"); 
     $check->bindParam(':accountID', $accid, PDO::PARAM_INT); 
     $check->execute(); 
     if(!$check){ 
      die("Server Error: 404Check, Please Contact A Member Of Staff If This Error Continues."); 
     }else{ 
      if($check->rowCount() > 0) { 
       $creditsQuery = $db->prepare("SELECT userCredits FROM userData WHERE userID = :accountID3"); 
       $creditsQuery->bindParam(":accountID3", $accid, PDO::PARAM_INT); 
       $creditsQuery->execute(); 
       //Set Credits To Variable From Database Column 
       $credits = $creditsQuery->fetch(PDO::FETCH_ASSOC); 
      }else{ 
       $sql = $db->prepare("INSERT INTO userData (userID, userCredits) VALUES (:accountID2, '0')"); 
       $sql->bindParam(':accountID2', $accid, PDO::PARAM_INT); 
       $sql->execute(); 
       if(!$sql){ 
        die('Server Error: 404Insert, Please Contact A Member Of Staff If This Error Continues.'); 
       } 
      } 
     } 
    }catch(PDOException $e){ 
     die ("Server Error: 404Connection, Please Contact A Member Of Staff If This Error Continues."); 
    } 
}  

?> 

Obwohl, wenn ich mich anmelden, scheint es nicht die Benutzer-ID oder Credits als 0 zu speichern, und der Tisch (Userdata) leer ist.

Danke,

Matt

Antwort

1

Das ist falsch:

$check->execute(); 
    if(!$check){ 
     ^^^^^^^ 

$check nicht auf magische Weise nicht in einen boolean die wahr/falsch ändern, wenn nicht ausführen. Es wird IMMER ein vorbereitetes Anweisungsobjekt sein und daher immer auf true ausgewertet.

Sie nicht Ausnahmen in PDO aktivieren, daher läuft es in der Standardeinstellung „return false bei einem Fehler“ -Modus, der Code bedeutet sein sollte:

$res = $check->execute(); 
if(!$res) { 
    die(...); 
} 

Und dies gilt auch für Ihre anderen vorbereiten/führe auch Blöcke aus - Dein Skript bringt sich selbst um, bevor es überhaupt zur Einfüge-Abfrage kommt, weil dein Test auf einen Datenbankfehler falsch ist.

+0

Danke, es scheint, dass die if-Anweisung jetzt ausgeführt wird, obwohl, der Code, der getötet wird, haben Sie irgendwelche Ideen, warum die Abfrage fehlschlägt? – Matt142

+0

keine Ahnung. selbst wenn deine sql 100% perfekt/gültig ist, gibt es mehrere Gründe dafür, dass sie fehlschlägt: Ausländische/eindeutige Schlüsselverletzung, db gestorben, Verbindung gestorben, blah blah. Sie müssen überprüfen, warum, z. 'die ($ db-> errorInfo())' –

+0

Ok, so verbindet sich die Datenbank erfolgreich, da der try-Block keine Ausnahme auslöst, obwohl es den Fehler 404check auslöst, wenn ich die Datei unter: [link] (http: //serverlauncherplus.co.uk/skins4accounts) einmal angemeldet. Ich kann mir keinen Grund vorstellen, warum $ res nicht wahr ist. – Matt142

Verwandte Themen