Testen, ob string könnte sein, boolean in PHP

Ich bin immer ein string aus $_GET und ich möchte, um zu testen, ob es ein boolean, bevor ich es verwenden, für einen Teil der mysql-Abfrage. Gibt es einen besseren Weg, es zu tun als:

function checkBool($string){
    $string = strtolower($string);
    if ($string == "true" || $string == "false" || 
        $string == "1" || $string == "0"){
        return true;
    }
    else {
        return false;
    }
}

if (checkBool($_GET['male'])){
    $result = mysql_query(
        "SELECT * FROM my_table " .
        "WHERE male='".$_GET['male']."'") or die(mysql_error());
}
  • Das wird nicht funktionieren, sowieso. Was ist Ihre Spalte Typ für male? Der MySQL-Typ "boolean" ist wirklich nur ein tinyint(1) also wenn das so ist, dann sollten Sie prüfen nur für 1s oder 0s. Wenn Sie char/varchar und haben zuvor auf "true", dann vergleicht man es mit "ja" oder "1" wird immer noch nicht überein.
  • Punkt getroffen, für die Prüfung ja und Nein, editiert mein snippet entsprechend. Spalte Typ ist in der Tat tinyint(1)! so true, false, 1 und 0 ist, was ich brauche, um zu überprüfen für
  • Dies nicht wirklich etwas ändern. Werden Sie noch verwenden Sie Ihre eigene Funktion, rewrited, als ich antwortete unten.
  • Die Prüfung für die string-Gleichwertigkeit wird nicht arbeiten, obwohl. Ihre SQL legt $_GET['male'] in Anführungszeichen, so dass, wenn $_GET['male'] "wahrer" Sie würden sich SELECT * FROM my_table WHERE male='true'. Dies wird tatsächlich zurückkehren Zeilen, in denen Männer=0, da MySQL versucht, konvertieren Sie die ZEICHENFOLGE "true", um eine Zahl, kann aber nicht, so bekommt es den Wert 0. Nehmen Sie die einfachen Anführungszeichen und es funktioniert wie erwartet.
  • Ich glaube, Sie haben NICHT den Punkt der Frage.
  • testen Sie dies jetzt und scheinbar perfekt funktioniert
  • Ich verstehe die Frage nur darauf hin, dass SELECT * FROM my_table WHERE male='true' vielleicht nicht so Verhalten, wie Sie erwarten würden und SELECT * FROM my_table WHERE male=true ist, was Sie brauchen.
  • SELECT * FROM my_table WHERE male='true' hat nicht funktioniert als ich es versucht habe.

InformationsquelleAutor DexCurl | 2011-11-25
Schreibe einen Kommentar