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
Réponse acceptée

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
Réponse acceptée
// 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

Bonsoir,

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

DylanVsn
Auteur

Bonsoir et merci de ta réponse,

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

Et comme ceci :

$requete = $pdo->query("SELECT * FROM forum_categories  WHERE id='$id' AND lock = true");
DylanVsn
Auteur

Non, toujours cette même erreur..

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

DylanVsn
Auteur

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
Auteur

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 :/

Que vaut $count ?

DylanVsn
Auteur

0 dans tous les cas

DylanVsn
Auteur

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 ! :)

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

DylanVsn
Auteur

C'est pas faux

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
Auteur

D'accord merci :)