2010-04-30 6 views
0
$stmt = mysqli_prepare($link," 
    SELECT * 
     FROM ads 
    INNER JOIN dept ON dept.id_dept = ads.in_dpt 
    INNER JOIN members ON members.idMem = ads.from_Mem 
    INNER JOIN sub_cat_ad ON id_sub_cat = ads.ads_in_Cat 
    INNER JOIN cat_ad ON idCat_ad = sub_cat_ad.from_cat_ad 
    WHERE ads_in_Cat = ? "); 

if(isset($_GET['fromSCat'])){ 
    $fromSCat = mysqli_real_escape_string($link,$_GET['fromSCat']); 
} 

mysqli_stmt_bind_param($stmt,'i',$fromSCat); 
mysqli_stmt_execute($stmt); 
mysqli_stmt_fetch($stmt); 

$tot=mysqli_stmt_num_rows($stmt); //Ouput: 0 

Sans la déclaration préparée, il est okQuelqu'un s'il vous plaît pouvez voir pourquoi la déclaration préparée suivante ne renvoie rien?

+0

Ce code a été très mal aménagé. S'il vous plaît faites un effort pour le formater correctement dans le futur. Ne faites pas travailler les gens si fort pour vous aider. –

+0

Désolé! pour cela et merci. Mais la question était pourquoi $ tot renvoie 0 – jartaud

Répondre

1

Probablement pas la raison pour laquelle il retourne 0, mais vous double-$fromSCat d'échappement - vous n'avez pas besoin de chaîne d'échappement dans les instructions préparées, bind_param fait déjà cela. Essayez de commenter la chaîne escape_string & voir ce qui se passe.

De même, vous pouvez parcourir les appels bind/exec/fetch à l'intérieur de votre instruction if, sauf si $fromSCat est en cours de définition dans le script.


Followup re commentaire: cette erreur signifie que votre base de données est peu précis. Avez-vous des index clés primaires & sur les tables pertinentes? mysqli est un peu bizarre pour avoir lancé une exception, ce n'est pas du tout son affaire. Si vous n'avez pas accès pour réparer les tables de base de données, ajoutez mysqli_report(MYSQLI_REPORT_OFF); près du début du script.

(également, si vous pouvez. Utiliser PDO plutôt il est préférable & propre à la fois la syntaxe et de la documentation.)

+0

Merci pour votre aide, j'ai éliminé mysqli_real ... , maintenant im obtenir cette erreur: Erreur irrécupérable: Exception non interceptée 'mysqli_sql_exception' avec le message 'Aucun index utilisé dans requête/instruction préparée – jartaud

1

Vous avez les paramètres mysql_real_escape_string() en arrière. c'est ($string_to_escape, $optional_database_handle). Donc, vous essayez d'interroger quelque chose comme WHERE ads_in_Cat='Resource #1' au lieu de votre paramètre $ _GET.

+0

Notez le i, bibliothèque différente (http://www.php.net/manual/fr/mysqli.real-escape-string.php). Techniquement, ce n'est pas en arrière, c'est vraiment déroutant. – tadamson

+0

Ah ouais ... un petit 'idiot' ... Une autre chose qui attire mon attention: vous exécutez un appel à fetch(), puis vous appelez ... num_rows(). Peut-être que la ligne résultante a déjà été consommée à partir du jeu de résultats d'ici là et que num_rows() renvoie correctement '0 lignes restantes'. –

+0

Merci pour votre aide, j'ai éliminé mysqli_real ..., maintenant im obtenir cette erreur: Erreur fatale: exception Uncaught 'mysqli_sql_exception' avec le message 'Aucun index utilisé dans requête/instruction préparée – jartaud

Questions connexes