Der Versuch, eine SELECT-Anweisung in MySQL auszuführen, funktioniert jedoch nicht

  • Ich glaube, ich habe die richtige Syntax, zumindest laut meinem Lehrbuch. Dies ist nur ein Teil der Datei, da die anderen Informationen für mein Problem irrelevant sind. Der Tabellenname ist user und der Spaltenname ist user. Ich glaube nicht, dass dies das Problem ist, da andere SQL-Anweisungen funktionieren. Es ist zwar nicht das Klügste, was ich wissen kann :) Hat jemand einen Fehler?

     try {
    $db=new PDO("mysql:host=$db_host;dbname=$db_name",
            $db_user,$db_pass);
    } catch (PDOException $e) {
    exit("Error connecting to database: " . $e->getMessage());
    }
    $user=$_SESSION["user"];
    
    $pickselect = "SELECT game1 FROM user WHERE user='$user' ";
    $pickedyet = $db->prepare($pickselect);
    $pickedyet->execute();
    echo $pickselect;
    
    if ($pickedyet == "0")
    { 
    echo '<form method="post" action="makepicks.php">
    <h2>Game 1</h2>......'
     
    22 November 2011
    Shomz
3 answers
  • Da Sie scheinbar vorbereitete Anweisungen verwenden, würde ich empfehlen, sie in vollem Umfang zu verwenden, um traditionelle Probleme wie die SQL-Injection zu vermeiden (wenn jemand schädlichen SQL-Code an Ihre Anwendung übergibt, ist dies teilweise durch Bereinigen von Benutzereingaben und / oder Verwendung von gebundenen vorbereiteten Anweisungen vermieden werden.

    Darüber hinaus müssen Sie die Ergebnisse Ihrer Abfrage tatsächlich abrufen, um sie anzuzeigen (vorausgesetzt, dies ist der Fall) dein Ziel). PHP hat eine sehr gute Dokumentation mit guten Beispielen. Hier sind einige Links: fetchAll ; vorbereiten ; bindParam .

    Hier ein Beispiel:

     try
    {
        $db = new PDO("mysql:host=$db_host;dbname=$db_name",
                      $db_user, $db_pass);
    }
    catch (PDOException $e)
    {
        exit('Error connecting to database: ' . $e->getMessage());
    }
    
    $user = $_SESSION['user'];
    
    $pickedyet = $db->prepare('SELECT game1 FROM user WHERE user = :user');
    /* Bind the parameter :user using bindParam - no need for quotes */
    $pickedyet->bindParam(':user', $user);
    $pickedyet->execute();
    
    /* fetchAll used for example, you may want to just fetch one row (see fetch) */
    $results = $pickedyet->fetchAll(PDO::FETCH_ASSOC);
    
    /* Dump the $results variable, which should be a multi-dimensional array */
    
    var_dump($results);
     

    EDIT - Ich gehe auch davon aus ist eine Tabelle namens 'user' mit einer Spalte namens 'user' und einer weiteren Spalte mit dem Namen 'game1' (dh, Ihre SQL-Anweisung ist abgesehen von der Verwendung gebundener Parameter korrekt).

    22 November 2011
    Kyle Johnson
  •  <?php
    
    session_start();
    
    $db_user = 'example';
    $db_pass = 'xxxxx';
    
    try
    {
        // nothing was wrong here - using braces is better since it remove any confusion as to what the variable name is
        $db=new PDO( "mysql:host={$db_host}dbname={$db_name}", $db_user, $db_pass);
    }
    catch ( Exception $e ) // catch all exceptions here just in case
    {
        exit( "Error connecting to database: " . $e->getMessage() );
    }
    
    // this line is unecessary unless you're using it later.
    //$user = $_SESSION["user"];
    
    
    // no need for a new variable here, just send it directly to the prepare method
    // $pickselect = '...';
    // also, I changed it to a * to get the entire record.
    $statement = $db->prepare( "SELECT * FROM user WHERE user=:user" );
    
    // http://www.php.net/manual/en/pdostatement.bindvalue.php
    $statement->bindValue( ':user', $_SESSION['user'], PDO::PARAM_STR );
    $statement->execute();
    
    // http://www.php.net/manual/en/pdostatement.fetch.php
    // fetches an object representing the db row.
    // PDO::FETCH_ASSOC is another possibility
    $userRow = $statement->fetch( PDO::FETCH_OBJ );
    
    var_dump( $userRow );
    
    echo $userRow->game1;
     
    22 November 2011
    Tim G
  • Ändern Sie dies user=$user mit diesem user='$user'. Bitte beachten Sie die einfachen Anführungszeichen.

    Außerdem führen Sie die Abfrage $pickedyet->execute(); aus, aber dann machen Sie echo $pickselect;, was sich nicht von der Zeichenfolge unterscheidet, die die Abfrage enthält.

    Kleine Hinweise:

    1. Sie müssen das Ergebnis der Abfrageausführung abrufen.
    2. Sie verwenden eine vorbereitete Anweisung, die sehr gut ist, aber Sie verwenden sie nicht wirklich , weil Sie keine Bindung eingehen.
    22 November 2011
    Aurelio De Rosa