php
  • mysql
  • mysqli
  • 2017-06-30 6 views 0 likes 
    0

    Ich verwende mysqli, um die Zeile zu bekommen, aber es gibt mir keine Zeile, und es gibt keinen Fehler in der Abfrage.Keine Zeile von Mysqli

    $query="select * from members where useremail='$user_email' and password='$password'"; 
    $result=$db->query($query); 
    $row = $db->fetch_array($result); 
    echo $row['id']; 
    

    Meine query Funktion

    function query($query){ 
         $result=mysqli_query($this->conn, $query); 
         if(!$result){ 
          echo $this->err_msg = mysqli_error($this->conn); 
          return false; 
         }else{ 
          return $result; 
         } 
    } 
    

    Meine fetch_array Funktion

    function fetch_array($result){ 
        return mysqli_fetch_array($result); 
    } 
    

    Wie kann ich Row mit mysqli?

    +4

    Ihr Code tun würde, ist wahrscheinlich anfällig für [** SQL-Injection **] (https: //en.wikipedia. org/wiki/SQL_injection) Angriffe. Sie sollten vorbereitete Anweisungen mit gebundenen Parametern verwenden, entweder über die [** mysqli **] (https://secure.php.net/manual/en/mysqli.prepare.php) oder [** PDO **] (https : //secure.php.net/manual/de/pdo.prepared-statements.php) Treiber. [** Dieser Post **] (https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) hat einige gute Beispiele. –

    +0

    @AlexHowansky ich benutze mysqli. –

    +0

    Ja, aber Sie verwenden keine vorbereiteten Anweisungen mit gebundenen Parametern. –

    Antwort

    1

    Ändern Sie Ihre ursprünglichen Code gebundenen Parametern zu reflektieren mysqli verwenden, dies ist sicherer und sollte

    $query="select * from members where useremail='$user_email' and password='$password'"; 
        $result=$db->query($query); 
        $row = $db->fetch_array($result); 
        echo $row['id']; 
    

    an gebundenen Parametern arbeiten mit mysqli Aussagen vorbereitet

    $query="select id from members where useremail=? and password=?"; // Don't use select *, select each column, ? are placeholders for your bind variables 
    $stmt = $connection->prepare($query); 
    if($stmt){ 
        $stmt->bind_param("ss",$user_email,$password); // Bind in your variables, s is for string, i is for integers 
        $stmt->execute(); 
        $stmt->bind_result($id); // bind the result to these variables, in the order you select 
        $stmt->store_result(); // Store if large result set, can throw error if server is setup to not handle more than x data 
        $stmt->fetch(); 
        $stmt->close(); 
        } 
    echo $id; // this would be same as $row['id'], $id now holds for example 5. 
    

    Wenn Sie mehrere Dinge auswählen, z Als "SELECT id,name FROM...", dann, wenn Sie bind_result (..), binden Sie sie nur n dort. $stmt->bind_result($id,$name);

    jetzt $ id und $ name enthalten die Spaltendaten für diese Zeile, die Ihrer Abfrage entsprechen. Wenn mehrere Zeilen übereinstimmt, statt stmt- $ würde> fetch() Sie

    while($stmt->fetch()){ // just like while($row = $result->fetch_assoc()){} 
        echo $id; 
        echo $name 
    } 
    
    +0

    Wie kann ich '$ row ['id']' und ich möchte es in Sitzung speichern, verwende ich mysqli nicht mit vorbereiteten Anweisung? Ich meine, ich möchte eine komplette Reihe und dann etwas aus der Reihe bekommen? –

    +0

    Sie würden '" SELECT id ... "', dann bind_result ($ id). $ row ['id'] wäre jetzt $ id. Und ja, Sie verwenden mysqli, vorbereitete Anweisungen sind eine Idee, um SQL-Injection-Angriffe zu verhindern. Jede Iteration von while ($ stmt-> fetch()) liefert das gleiche Ergebnis wie bei while ($ row = $ result-> fetch_assoc()). Auf die $ row ['id'] würde jetzt mit $ id zugegriffen; – clearshot66

    Verwandte Themen