2010-02-04 5 views
2

J'ai un bug étrange où j'appelle une requête d'insertion, il s'exécute avec succès (la ligne apparaît dans la base de données) mais mysql_query renvoie false. Il ne renvoie que false quand un champ particulier contient un trait de soulignement ou un tiret (ou probablement d'autres caractères, mais ce sont les deux que j'ai rencontrés jusqu'à présent).mysql_query renvoie false après avoir exécuté avec succès la requête en PHP

"INSERT INTO Hoopoes (name, owner, dbuser, dbpass, package) VALUES " 
         ."('".$this->config['hname']."', '".$this->config['email']."','".$db_prefix.$db_username."','$db_userpass'," 
         ."'".$this->config['package']."')" 

Voici donc la requête. Il échoue lorsque config['hname'] contient _ ou -. Je ne comprends pas pourquoi. La ligne apparaît dans la base de données, mais mysql_query renvoie toujours la valeur false. Toute idée serait très apprécié

+0

pilote utilisez-vous? –

+0

http://en.wikipedia.org/wiki/SQL_injection – hobodave

+3

Avez-vous vérifié mysql_error() après elle retourne false pour voir si cela donne un indice? –

Répondre

1

Vous mus sélectionnez la base de données après la connexion et avant toute requête:

// Connect... 
mysql_connect("server", "user", "pass"); 
// ...and select the database! 
mysql_select_db("database"); 

// Now you're good to go. :) 

Vous pouvez utiliser votre requête INSERT sans sélectionner une base de données lorsque vous spécifiez le schéma, comme ceci:

mysql_query("INSERT INTO `database`.`table` VALUES (...); 
+0

ya, je ne sélectionnez plus tôt dans le script. ce n'est pas le premier appel de DB qui est fait. le tableau de configuration est extrait de la base de données et quelques autres requêtes sont effectuées avant celle-ci. De toute façon, j'ai jeté un mysql_select_db redondant là-bas directement au-dessus de la requête et qui a semblé le fermer. Merci pour la réponse! – wallacer

0

Hmm .. cela était étrange. La requête a fonctionné et a été insérée avec succès apparemment sans une base de données sélectionnée. J'ai ajouté un appel mysql_select_db directement au-dessus de la requête, et maintenant cela fonctionne exactement de la même façon, mais la requête retourne true.

étranges

Merci pour l'aide!

2

Il est bon de vérifier ce que les rendements mysql_error(). Dans mon cas c'était 'table database_name.table_name n'existe pas'. Cela m'a donné un indice et après une deuxième vérification, j'ai réalisé que j'ai créé nom_table dans PHPMyAdmin dans une autre base de données que database_name: P

0

Même si la requête SQL est exécutée avec succès, cela ne signifie pas qu'elle doit renvoyer un TRUE. Il ne renvoie TRUE que si les requêtes sont exécutées dans le bon ordre. J'espère que c'est pourquoi vous obtenez un faux.

http://dev.mysql.com/doc/refman/5.7/en/mysql-real-query.html

+0

C'était il y a presque 7 ans;) Et j'ai trouvé la solution. Merci quand même! – wallacer

Questions connexes