Impossible de récupéré une information dans la base de donnée

Par DylanVsn, il y a 10 ans


Bonjour a tous,

Je ne sais pas ci ce sujet va ici ou dans SQLmais je m'excuse d'avance ci ce n'est pas au bon endroit.

Alors je vous explique mon soucis, j'ai une ligne dans ma base de donnée qui se nome lock et quand je la met en Boolean il me la transforme en TinyInt jusque la je me dit que ca ne devrais pas poser soucis mais quand j'éssai de la récupéré avec la ligne suivante :

function verif_sujet($pdo,$id){ $requete = $pdo->query("SELECT * FROM forum_categories WHERE id='$id' AND lock=1"); $requete->execute(); $count = $requete->rowCount(); return $count; }

Il me dit : Call to a member function execute().
Le probléme vient t'il du TinyInt ? Je ne peut le passer en Boolean..

Merci a tous de votre aide. Bonne soiré

Dylan

16 réponses

Carouge10, il y a 10 ans

Je viens de voir que lock est une fonction mysql alors il vous faut soit changer son nom, soit utiliser les '`' comme pour

ORDER BY `lock`
Carouge10, il y a 10 ans

Bonsoir,

Si vous enlevez les conditions, avez-vous un résultat ?

DylanVsn, il y a 10 ans

Bonsoir et merci de ta réponse,

Oui, ci j'enleve la partie AND lock=1 Il me trouve les resultats

Carouge10, il y a 10 ans

Et comme ceci :

$requete = $pdo->query("SELECT * FROM forum_categories WHERE id='$id' AND lock = true");
DylanVsn, il y a 10 ans

Non, toujours cette même erreur..

Carouge10, il y a 10 ans

Si vous essayer la requête avec un id dans phpmyadmin, vous avez une répone ?

DylanVsn, il y a 10 ans

Mysql me répond :

Requête SQL : Documentation SELECT * FROM forum_categories WHERE id=1 AND lock=0 ORDER BY `lock` DESC LIMIT 0, 25 MySQL a répondu: Documentation #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'lock=0 ORDER BY `lock` DESC LIMIT 0, 25' at line 1
DylanVsn, il y a 10 ans

Cela fonctionne mais ca dépend a quel niveau :p Ma requete est la suivante :

// Vérification du sujet function verif_sujet($pdo,$id){ $requete = $pdo->query("SELECT * FROM forum_categories WHERE id='$id' AND 'lock'=0"); $requete->execute(); $count = $requete->rowCount(); return $count; }

Et je vérifie avec ce code :

if(verif_sujet($pdo,$url[3]) == 1){ // Il a trouvé un resultat qui correspond donc il affiche le formulaire }else{ // Il n'a pas trouvé donc il redirige la personne }

Mais mémes la ou il devrais trouvé un resultat il ne trouve pas :/
Catégorie 01 = Lock donc redirection.
Catégorie 02 = Non Lock donc pas de redirection.

Mais la il me redirige a tous les coups :/

Carouge10, il y a 10 ans

Que vaut $count ?

DylanVsn, il y a 10 ans

0 dans tous les cas

Carouge10, il y a 10 ans
// Vérification du sujet function verif_sujet($pdo,$id){ $requete = $pdo->query("SELECT COUNT(*) FROM forum_categories WHERE id='$id' AND 'lock'=0 "); $requete->execute(); $count = $requete->fetchColumn(); ; return $count; }

rowCount ne fonctionne pas forcément avec mysql

DylanVsn, il y a 10 ans

Un grand merci ! cela fonctionne impecablement !
J'aimerais te poser une petite question supplementaire: Pourquoi quand je met en boolean il me le transforme en TinyInt ? A cause du nom ? (lock) ?
En tous cas un grand merci de ton aide ! :)

Carouge10, il y a 10 ans

Bonne question, après tout un boolean c'est un int qui prend que 2 valeurs.

DylanVsn, il y a 10 ans

C'est pas faux

Huggy, il y a 10 ans

Toutes les valeurs <> 0 sont considérées comme VRAI (de -128 à +127 sauf 0)
et zéro comme FAUX
parcontre, l'alias TRUE correspond à la valeur 1
et FALSE à 0
donc prudence, il vaut mieux comparer avec FALSE qu'avec TRUE

DylanVsn, il y a 10 ans

D'accord merci :)