2010-04-30 3 views
0

J'ai cette fonction pour préparer la variable à utiliser dans une requête SQL:Comment détecter le remplissage sur un nombre entier et le traiter comme une chaîne?

function sqlize($mInput) 
{ 
    if (!isset($mInput)) 
     $mInput = "null"; 

    elseif (strtolower($mInput) == "null") { } 

    elseif (is_numeric($mInput)) { } 

    elseif (is_string($mInput)) 
    { 
     $mInput = trim($mInput); 
     $mInput = addslashes($mInput); 
     $mInput = '"' . $mInput . '"'; 
    } 
    else 
     $mInput = "null"; 
    return $mInput; 
} 

J'ai une chaîne « 0004 », qui va dans un « champ varchar », est cought par is_numeric, et est sauvé "4" et non "0004". Existe-t-il un moyen de détecter le remplissage et de le traiter comme une chaîne?

Merci! devrait être quelque chose comme

function sqlize($mInput) 
    { 
     switch(TRUE) 
     { 
      default: break; 
      case (!isset($mInput)): $mInput = "null"; break; 
      case (strtolower($mInput) == "null"): break; 
      case (is_numeric($mInput)): 
       if ((string) intval($mInput) === (string) $mInput) 
        break; 
      case (is_string($mInput)): 
        $mInput = trim($mInput); 
        #v2 
        $mInput = $_SESSION['oCore']->oDatabase->sanatize($mInput); 
// ADOdb's oDb->qstr();     
        # v1 
        #$mInput = addslashes($mInput); 
        #$mInput = '"' . $mInput . '"'; 
        break; 
     } 
     return $mInput; 
} 
+1

Remarque: N'utilisez pas les addslashes pour échapper des données. Si vous utilisez les fonctions mysql_ *, utilisez mysql_real_escape_string. – webbiedave

+0

cela pourrait-il fonctionner avec ADOdb? – Sirber

+1

adodb '$ db-> qstr()' devrait le faire. – Sirber

Répondre

3

au lieu de is_numeric() utilisation (int)$var == $var
J'ai vu une belle utilisation du commutateur, ce:

EDIT

Bonne réponse basée sur Cesar et conseils webbiedave :

function sqlize($mInput) 
{ 
    switch(TRUE) 
    { 
     default: 
     case (!isset($mInput)): $mInput = "null"; break; 
     case (strtolower($mInput) == "null"): break; 
     case (is_numeric($mInput)): break; 
     case (is_string($mInput)): 
      $mInput = trim($mInput); 
      $mInput = addslashes($mInput); 
      $mInput = '"' . $mInput . '"'; 
      break; 
    } 
    return $mInput; 
} 
+0

en utilisant 'elseif ((int) $ mInput == $ mInput)' déclenche sur des chaînes réelles aussi – Sirber

+0

+1 pour le commutateur! : D – Sirber

+0

qui semble fonctionner: 'case (is_numeric ($ mInput)): si (intval ($ mInput)! = $ MInput) pause;' – Sirber

Questions connexes