Heim >Backend-Entwicklung >PHP-Tutorial >mysql – Fehler bei der Verwendung von PDO zum Abfragen der Datenbank in PHP
Der Abfragecode lautet:
<code>$email=htmlspecialchars($_POST["email"]); if($sql->getData('SELECT * FROM user WHERE email='.$email)==NULL){ </code>
Der Code für getData lautet:
<code>public function getData($sql,$type=1){ $data=Array(); $db=$this->db(); $result=$db->query($sql); $sth = $db->prepare($sql); $sth->execute(); if(is_bool($result)) return $result; if($type==1) while($a = $sth->fetch(PDO::FETCH_ASSOC)) $data[]=$a; elseif($type==2) while($a = $sth->fetch(PDO::FETCH_BOTH)) $data[]=$a; if($data) return $data; else return NULL; } </code>
Die Fehlermeldung lautet:
<code>Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com' at line 1' in D:\phpStudy\WWW\core\mysql\drivers\PDO.php:61 Stack trace: #0 D:\phpStudy\WWW\core\mysql\drivers\PDO.php(61): PDO->query('SELECT * FROM u...') #1 D:\phpStudy\WWW\core\login.php(105): DB_PDO->getData('SELECT * FROM u...') #2 {main} thrown in D:\phpStudy\WWW\core\mysql\drivers\PDO.php on line 61</code>
Der Abfragecode lautet:
<code>$email=htmlspecialchars($_POST["email"]); if($sql->getData('SELECT * FROM user WHERE email='.$email)==NULL){ </code>
Der Code für getData lautet:
<code>public function getData($sql,$type=1){ $data=Array(); $db=$this->db(); $result=$db->query($sql); $sth = $db->prepare($sql); $sth->execute(); if(is_bool($result)) return $result; if($type==1) while($a = $sth->fetch(PDO::FETCH_ASSOC)) $data[]=$a; elseif($type==2) while($a = $sth->fetch(PDO::FETCH_BOTH)) $data[]=$a; if($data) return $data; else return NULL; } </code>
Die Fehlermeldung lautet:
<code>Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com' at line 1' in D:\phpStudy\WWW\core\mysql\drivers\PDO.php:61 Stack trace: #0 D:\phpStudy\WWW\core\mysql\drivers\PDO.php(61): PDO->query('SELECT * FROM u...') #1 D:\phpStudy\WWW\core\login.php(105): DB_PDO->getData('SELECT * FROM u...') #2 {main} thrown in D:\phpStudy\WWW\core\mysql\drivers\PDO.php on line 61</code>
Sie müssen die email
Adresse
<code class="php"><?php $email=htmlspecialchars($_POST["email"]); if($sql->getData('SELECT * FROM user WHERE email="'.$email.'"')==NULL){ </code>
Dies ist ein Syntaxfehler in Ihrer SQL-Anweisung. Die Zeichenfolge muss in Anführungszeichen gesetzt werden:
<code class="php">$pdo->getData("SELECT * FROM `table` WHERE `email` = '{$email}'");</code>
Wenn Sie in Zukunft auf einen solchen Fehler stoßen, drucken Sie einfach Ihre Abrechnung aus und Sie werden wissen, wo Sie einen Fehler gemacht haben