IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[MySQLi] - Connaitre dernière modif. de BDD ?


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut [MySQLi] - Connaitre dernière modif. de BDD ?
    Salutations,

    Soit le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $connexion = mysqli_connect("$chemin_db","$login","$pass","$database");
    (...)
    $res = $connexion->query ("SHOW TABLE STATUS FROM $table");
    $row = mysqli_fetch_assoc($res);
    $lastmaj = $row['UPDATE_TIME'];
    (...)
    echo $lastmaj;
    Cela marchait avant en MySQL. Depuis le passage en MySQLi, la variable $lastmaj n'affiche rien...

    Any idea ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu mélanges le style procédurale et le style objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row = $res->fetch_assoc();

    Au passages les " ne servent à rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $connexion = mysqli_connect($chemin_db,$login,$pass,$database);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu mélanges le style procédurale et le style objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row = $res->fetch_assoc();

    Au passages les " ne servent à rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $connexion = mysqli_connect($chemin_db,$login,$pass,$database);
    J'ai le message suivant en haut de la page :
    Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in /MonURL/share.php on line 33
    NULL
    Merci pour les ", je viens de les virer...

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Dans le code que je t'ai corrigé, il n'y pas "mysqli_fetch_assoc()".
    Mais décide toi entre procédural et objet.
    Si tu choisis objet, mysqli_connect() est à changer aussi.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Dans le code que je t'ai corrigé, il n'y pas "mysqli_fetch_assoc()".
    Mais décide toi entre procédural et objet.
    Si tu choisis objet, mysqli_connect() est à changer aussi.
    Je vais essayer... Mais voila, justement, on pointe du doigt le vrai pb :

    Procédural / Objet : Définir ?
    (j'ai jamais été capable de comprendre le topo...)

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Dans la doc mysqli à chaque fois tu as un exemple en objet et un exemple en procédural. Il faut seulement ne pas mélanger les deux.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $res = $connexion->query ("SHOW TABLE STATUS FROM $table");
    $row = $res->fetch_assoc();
    var_dump($row);
    $lastmaj = $row['UPDATE_TIME'];
    Fatal error: Call to a member function fetch_assoc() on boolean in /MonURL/share.php on line 33

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ca signifie que ta requête ne fonctionne pas, il faut debuguer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = "SHOW TABLE STATUS FROM $table";
    $res = $connexion->query ($sql);
    echo $sql;
    echo $connexion->error;
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Ca signifie que ta requête ne fonctionne pas, il faut debuguer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = "SHOW TABLE STATUS FROM $table";
    $res = $connexion->query ($sql);
    echo $sql;
    echo $connexion->error;
    SHOW TABLE STATUS FROM DestockAccess denied for user 'MonLoginBDD'@'%' to database 'Destock'

  10. #10
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Et donc ce n'est pas une erreur dans la requête mais une erreur d'accès refusé à la BDD.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Et donc ce n'est pas une erreur dans la requête mais une erreur d'accès refusé à la BDD.
    Alors la, je suis étonné...
    Juste avant cette requête, j'ai une :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rqtok = $connexion->query ("SELECT * FROM $table WHERE Dispo='Oui'");
    Qui elle semble fonctionner à merveille puisqu'elle m'affiche un listing de produits.

  12. #12
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    C'est pourtant ce que dit le message d'erreur :
    Access denied for user 'MonLoginBDD'@'%' to database 'Destock'
    MySQL reçoit cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW TABLE STATUS FROM Destock
    Est-ce bien la BDD Destock que vous voulez interroger ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW TABLE STATUS FROM $table
    Pourquoi utiliser une variable $table ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  13. #13
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Voila les lignes de codes du dessus qui fonctionnent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Requetes SQL
    $rqtok = $connexion->query ("SELECT * FROM $table WHERE Dispo='Oui'");
    $combienok = mysqli_num_rows($rqtok);
    $rqtoff = $connexion->query ("SELECT * FROM $table WHERE Dispo='Non' AND Recyclage='Non' AND Ecart='Non'");
    $combienoff = mysqli_num_rows($rqtoff);
    // Recherche des categories APRES verification de l'inventaire
    $req = $connexion->query ("SELECT *, TO_DAYS( NOW( ) ) - TO_DAYS( `Date` ) < 15 AS new, TO_DAYS( NOW( ) ) - TO_DAYS( `Modif` ) < 15 AS maj, TO_DAYS( NOW( ) ) - TO_DAYS( `Date` ) > 60 AS old, TO_DAYS( NOW( ) ) - TO_DAYS( `Date` ) > 180 AS megaold FROM $table WHERE Dispo='Oui' ORDER BY Modif DESC, Date DESC, Type");
    Pourquoi utiliser la variable $table ? Car nous avons plusieurs pages semblables, et faisons un copier/coller du code sur chacune, il nous suffit juste de changer les variables.

  14. #14
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Casio Voir le message
    Voila les lignes de codes du dessus qui fonctionnent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Requetes SQL
    $rqtok = $connexion->query ("SELECT * FROM $table WHERE Dispo='Oui'");
    $combienok = mysqli_num_rows($rqtok);
    $rqtoff = $connexion->query ("SELECT * FROM $table WHERE Dispo='Non' AND Recyclage='Non' AND Ecart='Non'");
    $combienoff = mysqli_num_rows($rqtoff);
    Si votre table est grosse, vous allez rapatrier des milliers de lignes pour seulement les compter alors qu'il existe une fonction de comptage très efficace en SQL : COUNT !
    Faites plutôt ces requêtes :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT COUNT(*) AS nombre
    FROM $table
    WHERE Dispo = 'Oui';
     
    SELECT COUNT(*) AS Nombre
    FROM $table
    WHERE Dispo = 'Non' 
        AND Recyclage = 'Non' 
        AND Ecart = 'Non'

    Au passage : aérez votre code comme je l'ai fait ci-dessus ; il sera plus facile à lire et à déboguer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Recherche des categories APRES verification de l'inventaire
    $req = $connexion->query ("SELECT *, TO_DAYS( NOW( ) ) - TO_DAYS( `Date` ) < 15 AS new, TO_DAYS( NOW( ) ) - TO_DAYS( `Modif` ) < 15 AS maj, TO_DAYS( NOW( ) ) - TO_DAYS( `Date` ) > 60 AS old, TO_DAYS( NOW( ) ) - TO_DAYS( `Date` ) > 180 AS megaold FROM $table WHERE Dispo='Oui' ORDER BY Modif DESC, Date DESC, Type");
    Je comprends de votre requête que vous voulez qualifier vos lignes en fonction de l'ancienneté de la date. Voici une autre méthode qui donne ça en une seule colonne :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT /* les colonnes nécessaires et pas étoile ! */
    	CASE 
    		WHEN DATEDIFF(CURRENT_DATE, Date) < 15 THEN 'new'
    		WHEN DATEDIFF(CURRENT_DATE, Modif) < 15 THEN 'maj'
    		WHEN DATEDIFF(CURRENT_DATE, Date) > 60 THEN 'old'
    		WHEN DATEDIFF(CURRENT_DATE, Date) > 180 THEN 'megaold'
    	END AS Anciennete
    FROM $table 
    WHERE Dispo = 'Oui' 
    ORDER BY Modif DESC, Date DESC, Type

    [/quote]Pourquoi utiliser la variable $table ? Car nous avons plusieurs pages semblables, et faisons un copier/coller du code sur chacune, il nous suffit juste de changer les variables.[/QUOTE]
    J'appelle ça de la paresse contre productive !

    Plutôt que de copier/coller un paquet de code puis de changer la variable $table puis d'adapter les conditions de la requête à la table, je trouve plus productif de copier / coller le code et de n'adapter que la requête.
    Et si vous avez vraiment des requêtes identiques, au lieu de les copier / coller, faites une fonction !

    De plus, dans le cas qui vous préoccupe ici, vous utilisez une variable $table alors que la requête attend un nom de base de données. Le problème ne viendrait-il pas de là ?
    Si vous voulez connaître le statut d'une table, votre requête devrait ressembler à ça :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SHOW TABLE STATUS 
    FROM /* votre bdd */
    LIKE $table
    Voir la doc MySQL à ce sujet.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/10/2008, 05h37
  2. Réponses: 10
    Dernier message: 11/08/2008, 16h38
  3. Réponses: 2
    Dernier message: 07/02/2008, 18h38
  4. date de dernière modification d'une table ?
    Par NiBicUs dans le forum Requêtes
    Réponses: 3
    Dernier message: 17/12/2004, 18h11
  5. modification champs BDD
    Par jeff06_2 dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/06/2004, 20h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo