Salut, je me pose la question sur mon insert, je dois ajouter les paramètres now ?

Je convertie ma fonction en pdo en ce moment et j'ai :

<?php
//la function qui va enregister l'invitation dans la bdd
function enreg_invitation()
{

    // On récupère le nombre de demandes déjà existates entre les 2 pseudos
    $query = 'SELECT * FROM amis WHERE pseudo_exp = "'.$_SESSION'pseudo'].'" AND pseudo_dest = "'.$_GET'pseudo'].'"';
    $nb_demandes_deja_existantes = mysql_query($query);

    if (mysql_fetch_assoc($nb_demandes_deja_existantes) == NULL) // On crée une nouvelle demande uniquement si il n'y en a pas déjà dans la base 
    {
        $query = mysql_query("
        INSERT INTO amis(id_invitation,pseudo_exp,pseudo_dest,date_invitation,date_confirmation,date_vue,active)
        VALUES
        ('','{$_SESSION'pseudo']}','{$_GET'pseudo']}',NOW(),NOW(),NOW(),0)
    ");
    }

}
?>

que j'aimerais convertir en pdo donc j'ai fais :

function enreg_invitation()
{
global $bdd;
// On récupère le nombre de demandes déjà existates entre les 2 pseudos
$query = $bdd->prepare(" SELECT FROM amis WHERE pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo");
$query->execute(array('get_pseudo' => $_GET'pseudo'], 'session_pseudo' => $_SESSION'pseudo']));
$nb_demandes_deja_existantes = $query->fetch();
if(PDO::FETCH_ASSOC($nb_demandes_deja_existantes) == NULL) // On crée une nouvelle demande uniquement si il n'y en a pas déjà dans la base 
{
$query = $bdd->prepare("    INSERT INTO amis(id_invitation,pseudo_exp,pseudo_dest,date_invitation,date_confirmation,date_vue,active)
VALUES
        ('',:session_pseudo,:get_pseudo,NOW(),NOW(),NOW(),0)
 ");

$query->execute(array('get_pseudo' => $_GET'pseudo'], 'session_pseudo' => $_SESSION'pseudo']));
}

}

8 réponses


$query = $bdd->prepare(" SELECT FROM amis WHERE pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo");

Il y a un soucis sur cette ligne. Tu dois toujours informer si tu souhaites sélectionner toutes les informations, ou seulement des champs spécifiques.
Par conséquent, cela doit être une faute de frappe, puisque l’astérixis été présent dans ton ancienne version de ton code.

En gros si MySQL n'a pas cette information, il ne peut pas correctement exécuter la requête.

Ce qui donne:

$query = $bdd->prepare(" SELECT * FROM amis WHERE pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo");
Ask
Auteur

Oui je l'est oublié de mettre le *
MAIS le :

if(PDO::FETCH_ASSOC($nb_demandes_deja_existantes) == NULL)

c'est bon ?

Ask
Auteur

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'pseudo_exp' cannot be null' in C:\wamp\www\reseau\modele\social\get_envoi.php on line 20
( ! ) PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'pseudo_exp' cannot be null in C:\wamp\www\reseau\modele\social\get_envoi.php on line 20

J'ai comme erreur

Bonsoir,

"'pseudo_exp' cannot be null'", la variable $_SESSION'pseudo'] semble être vide, avez-vous bien lancé le session_start ?

Hum... Je comprend pas bien ta première requête, tu essai de récupérer un champ ayant la même valeur dans la colonne "pseudo_exp" et "pseudo_dest".
Le pseudo de ces deux colonnes ne devrait il pas être différent ?

Bonsoir,

function enreg_invitation()
{
    global $bdd;

    if (empty($_GET['pseudo'])) {
        throw new Exception("Parameter GET pseudo is empty");
    }

    if (empty($_SESSION['pseudo'])) {
        throw new Exception("Parameter SESSION pseudo is empty");
    }

    // On récupère le nombre de demandes déjà existates entre les 2 pseudos
    $query = $bdd->prepare("SELECT FROM amis WHERE pseudo_exp = :session_pseudo AND pseudo_dest = :get_pseudo LIMIT 1");

    $query->execute(array(
        'get_pseudo' => $_GET['pseudo'],
        'session_pseudo' => $_SESSION['pseudo']
    ));

    if (!$query->rowCount()) {
        $query = $bdd->prepare("INSERT INTO amis(id_invitation,pseudo_exp,pseudo_dest,date_invitation,date_confirmation,date_vue,active) VALUES ('',:session_pseudo,:get_pseudo,NOW(),NOW(),NOW(),0)");
    }
}

rowCount pour compter le nombre de lignes retournées

Attention "PDO::FETCH_ASSOC" n'est pas une methode, mais juste une contante, elle peut etre passée dans les methode fetch pour spécifier le type de retour.
http://php.net/manual/fr/pdostatement.fetch.php voir fetch_style

Cordialement,

Ask
Auteur

Bonsoir le problème est résolu merci !

Bonsoir,
Il serait bien de donner la réponse qui a aidé à résoudre votre problème et de mettre le sujet en résolu.