Warning: sprintf() [function.sprintf]: Too few arguments

  • Auteur de la discussion Auteur de la discussion sff
  • Date de début Date de début
WRInaute impliqué
Bonjour,

Depuis peu je me retrouve avec une erreur dont je comprends pas le problème. Voici l'erreur complet :

Warning: sprintf() [function.sprintf]: Too few arguments in /home/httpd/m/i/c/mick/www.rpgillusion.net/forum/includes/connexion.php on line 32

Le problème se situe dans cette page (connexion.php) :

Code:
<?
class mysql
{

	var      $host    =    "..."; // Serveur SQL
	var      $user    =    "...";              // Login pour le serveur SQL
	var      $pass    =    "...";           // Mot de passe pour le serveur SQL
	var      $bdd     =    "...";          // Nom de vôtre Base De Données


	function connect()
	{
		@mysql_connect($this->host,$this->user,$this->pass) or die("Erreur de connexion au serveur SQL");
		@mysql_select_db($this->bdd) or die("Impossible de se connecter à la base de données");

		$this->host = "";$this->user = "";$this->pass = "";

	}

	
   function query_sprintf($query)
	{	

		$mysql = sprintf($query);
		
	return($mysql);
}

}
?>

La ligne 32 correspond à cette ligne : $mysql = sprintf($query);

Concernant mes requêtes elle fonctionnent comme ceci :

Code:
include("includes/connexion.php");
$mysql = new mysql();
$mysql->connect();

$mysql->query_sprintf("INSERT INTO ".$mysql->pref."_discussions
						(message, pseudo, titre, date, forum_id, message_id, mb_id, ip)
				VALUES('%s', '%s', '%s', '%s', '%d', '%d', '".$session['id']."', '".$_SERVER['REMOTE_ADDR']."')",
 				mysql_real_escape_string($content),
                mysql_real_escape_string($_POST['pseudo']),
				mysql_real_escape_string($titre),
				mysql_real_escape_string($date),
				mysql_real_escape_string($frm),
				mysql_real_escape_string($id));

Peut - être quelqu'un pourra me dire d'où vient le problème.

Merci d'avance
 
WRInaute occasionnel
logiquement, quand tu as cette erreur, cela signifie qu'il y a plus de directives à remplacer que d'arguments transmis à sprintf. Dans ta fonction query_sprint_f, tu passes bien la requête, mais non les arguments à remplacer à la volée.

Cela devrait être : $mysql = sprintf($query, $arg1, $arg2, $arg3, etc.);
 
WRInaute accro
Le problème, c'est que ta méthode query_sprintf ne prend qu'un seul argument, et que donc tous les autres sont ignorés, et que tu ne passes que ce premier argument à sprintf, qui en voudrait plus pour remplir tous les %x.

Je te conseille te jeter un oeil du côté de vsprintf, func_get_args, et array_shift, pour faire, par exemple:
Code:
function query_sprintf
{
 $args = func_get_args();
 $format = array_shift($args);
 $mysql = vsprintf($format,$args);
 return($mysql);
}

Pas testé, mais ça ne devrait pas être très loin.

Sinon, je te conseille te jeter un coup d'oeil du côté de PDO, avec des :nom ou des ? il s'occupera comme un grand de faire les escapes qu'il faut et tout, comme avec une librairie ODBC ou avec DBI en perl. Voir les exemples dans:

http://uk2.php.net/manual/fr/pdostatement.execute.php

Jacques.
 
Discussions similaires
Haut