2010-08-24 7 views
1

Donc, cela peut être stupide, mais je ne peux rien obtenir à insérer dans un compte MySQL sur un certain compte, et j'ai regardé cela pendant deux heures. Je suis un débutant à PHP, donc je pourrais très bien faire quelque chose de stupide. J'ai joint une capture d'écran de la base de données que j'essaie d'insérer.Pourquoi je ne peux pas INSERT INTO?

Voici ce que je parle:

http://dillondoyle.com/files/dbsetup.jpg (Imgur semble être vers le bas pour moi)

Voici le code que j'ai, et PhpMyAdmin m'a dit GRANT ALL PRIVILEGES ON . TO ...

$fbFirstName = $me['first_name']; 
$fbLastName = $me['last_name']; 
$fbEmail = $me['email']; 
mysql_real_escape_string($fbFirstName,$fbLastName,$fbEmail); 

$getuserresult = mysql_query("SELECT * FROM newusers WHERE fbUID=$uid"); 
$userrowsreturned=mysql_num_rows($getuserresult); 
if ($userrowsreturned=0) 
    { 
     echo '<br />user already exists, will update something here eventually<br />'; 
    } 
else { 
     $sql = mysql_query("INSERT INTO newusers (fbUID,callsAttempted,callsMade,fbEmail,fbFirstName,fbLastName) VALUES ($uid,'1','0',$fbEmail,$fbFirstName,$fbLastName)"); 
     if(!$sql) { 
      die("Nope"); 
     } else { 
      echo "1 record added"; 
     } 
     echo '<br />created user<br />'; 
} 
+1

Pouvez-vous 'mourir (mysql_error())' à la place? – Matchu

Répondre

3

Deux choses ne vont pas ici. Échapper va comme:

$fbFirstName = mysql_real_escape_string($fbFirstName); 
// for all variables 

// or, just in one go: 
$fbFirstName = mysql_real_escape_string($me['first_name']); 

// and for integers, make sure they are actually integers (and prevent mayhem) 
$some_id = (int)$me['some_id']; 
$uid = (int)$uid; 

Et quand vous insérer devez indiquer des valeurs non entières:

$sql = mysql_query("INSERT INTO `newusers` 
    (`fbUID`,`callsAttempted`,`callsMade`,`fbEmail`,`fbFirstName`,`fbLastName`) 
    VALUES 
    ('$uid',1,0,'$fbEmail','$fbFirstName',$fbLastName')"); 

(mais vous pouvez citer des entiers aussi bien - vous ne savez jamais si un ID externe est, ou peut-être , alphanumérique.)

+2

Il est étonnant que le fait de donner à mysql_real_escape_string des types de données de paramètres incorrects ainsi qu'un paramètre de plus qu'il n'est documenté comme acceptant n'est pas fatal. –

+0

Brillant! Merci pour l'aide. Apprentissage progressif Je vais marquer cela comme correct quand cela me permet de le faire en 3 minutes! MERCI! –

+0

génial. J'ai donné un peu plus de contexte que vous devriez connaître, comme la distribution de valeurs entières (en les forçant à n'être que des nombres) et en citant les noms de champs/tables dans mysql. (car si vous avez un champ nommé 'order', ou' table' vous ne rencontrerez pas de bogues difficiles à trouver) – mvds

0

d'abord vous devez changer

$getuserresult = mysql_query("SELECT * FROM newusers WHERE fbUID=$uid"); 

à

$getuserresult = mysql_query("SELECT * FROM newusers WHERE fbUID='$uid'"); 

après que le changement de votre insert:

$sql = mysql_query("INSERT INTO newusers (fbUID,callsAttempted,callsMade,fbEmail,fbFirstName,fbLastName) VALUES 
    ('$uid','1','0','$fbEmail','$fbFirstName',$fbLastName')"); 
2

Vous avez une erreur

if ($userrowsreturned=0) 

devrait être (utiliser doubles égaux pour tester l'équivalence, égaux unique pour l'attribution)

if ($userrowsreturned==0) 

Je pense aussi que vous actua lly signifie ce qui suit puisque vous vérifiez si un utilisateur existe déjà

if ($userrowsreturned==1) 
Questions connexes