2016-05-01 7 views
0

Ich habe den folgenden Code in meine CRUD KlassePhp Mysqli einfache Klassenmethode für INSERT, UPDATE, DELETE und Search

//function to execute prepared statement query 
//$sql = select , insert, update and or delete query => insert into table(col,col,col,...col) values(?,?,?,...?); 
//$dataTypes = "ssidb", it could be any char in s=>string, i=>integer, d=>double and b=>blob data 
//$param = $val1,$val2,$val3,....$valn, this is an option coma separated values to bind with query 
public function dbQuery($sql,$dataTypes="",$param=""){ 
    try{ 
     $this->connect(); 
     $stmt = $this->con->stmt_init(); 
     $stmt = $this->con->prepare($sql); 
     $stmt->bind_param($dataTypes, $param);   
     if($stmt->execute() === true){ 
      return true;  
      } 
     else{ 
      return false; 
      } 
     }catch(Exception $e){ 
      $this->errorMsg = $e->getMessage(); 
     } 
     $this->closeConnection(); 
    } 

ich diese Methode aus meiner Index-Seite wie folgt nenne:

if(isset($_POST['btnSearch'])){ 
//search for some record with primary key 
$sno = intval($_POST['sno']); 
$sql = "SELECT sno,std_name,email,roll_number FROM table_1 WHERE sno = ?"; 
$dTypes = "i"; 
$params = $sno; 
if($db->dbQuery($sql,$dTypes,$params)){ 
    echo('Record exists'); 
    } 
else{ 
    echo('Record did not found'.$db->errorMsg); 
    } 
}//search for record 

// Einfügen von Werten in Tabelle_1 Tabelle

Dies immer zurück wahr, entweder gibt es einen Datensatz existiert oder nicht? Was läuft mit diesem Code falsch?

+0

Konsultieren Sie diese folgenden Links http://php.net/manual/en/mysqli.error.php und http://php.net/manual/en/function.error-reporting.php und wenden Sie diese an Ihre Code. –

+0

Es ist kein Fehler auf der Seite angezeigt, ich habe die error_reporting (E_ALL) hinzugefügt; ini_set ("display_errors", 1); auf meiner Indexseite –

Antwort

2

Es gibt viele Fehler in Ihrem Code, und es funktioniert nie wie beabsichtigt, auch nach der Behebung dieses speziellen Problems.

Bevor Sie mit einer Klasse beginnen, müssen Sie mit rohen API-Funktionen intensiv üben und lernen, sie auswendig zu verwenden. Sonst wird deine Klasse nur ein Strohhaus sein, das von einer weichen Berührung zerbröckelt.

Jetzt zu Ihrem Problem.

Um es zu lösen, müssen Sie eine sehr wichtige mathematische Konzeption verstehen, die lautet: "leeren Ergebnis ist kein Fehler". 10 - 5 - 5 = 0 bedeutet nicht, dass ein Fehler in Ihren Berechnungen ist! Es bedeutet lediglich, dass das Ergebnis Null ist.

Exacly das gleiche ist hier. Wenn eine Datenbank keine Zeilen zurückgibt, bedeutet dies nicht, dass ein Fehler vorliegt. Es scheint nur, dass es keine Daten gibt, die zurückgegeben werden können.

Das Gegenteil ist auch wahr: Wenn es keinen Fehler gibt, bedeutet das nicht, dass Zeilen gefunden werden.

Um zu sehen, ob eine Zeile zurückgegeben wurde oder nicht, müssen Sie diese Zeile abrufen.

Daher, anstatt execute() Ergebnis zu überprüfen, holen Sie einfach Ihre Zeile in eine Variable und überprüfen Sie dann, ob es etwas enthält.

+0

Sie haben Recht, meine Methode ist nur ein Tontopf, aber in der Tat habe ich nur entweder die Methode überprüft oder nicht nur wie PDO, deshalb ich liebe wirklich zu PDO. Wie auch immer, es bedeutet, dass ich nicht überprüfen kann, ob die Abfrage wahr oder falsch zurückgibt, bis ich das Ergebnis abrufe und die richtige Bedingung mit params überprüfe. –

+0

In der Tat, in PDO haben Sie genau das gleiche. Sie können das Ergebnis von execute() auch nicht mit PDO für diesen Zweck überprüfen. Und ja, um zu sehen, ob Ihre Anfrage irgendetwas zurückgegeben hat oder nicht, müssen Sie es holen. Außerdem ist es ziemlich logisch. Verwenden Sie diese ausgewählten Daten nicht? Dann musst du es holen holen es trotzdem –

Verwandte Themen