2010-08-29 6 views
1

Utiliser le dernier php pour créer une fonction qui ajoute une ligne à un utilisateur de table.Pourquoi bindValue ou BindParam ne modifie pas l'instruction préparée?

class targil_db { 

    private $_pdo; 

    public function __construct() { 
     // username: root password: <blank> database: targil 
     $this->_pdo = new PDO(
        'mysql:host=127.0.0.1;dbname=targil', 
        'root', 
        '' 
        ); 
    } 

function addUser($username, $password) { 

    $md5password = md5($password); 
    $sql = <<<SQL 
     "INSERT INTO user (username,password) VALUES (:username,:password)" 
SQL; 

    $stmt = $this->_pdo->prepare($sql); 
    $stmt->bindValue(':username', $username,PDO::PARAM_STR); 
    $stmt->bindValue(':password', $password,PDO::PARAM_STR); 
    $stmt->execute(); 
} 

} 

quand j'exécute la fonction addUser, c'est la requête que je vois exécuté sur le fichier journal mysql:

INSERT INTO user (username,password) VALUES (:username,:password) 

comme vous pouvez le voir ne pas remplacer le: varname dans la valeur correcte . qu'est-ce qui me manque?

J'ai essayé à la fois bindValue et bindParam mais j'ai obtenu les mêmes résultats.

mise à jour

même quand je change :username et :password-?,? et j'utilise bindValue(1,$username) et bindValue(2,$password) i obtenir les mêmes résultats. la requête qui est exécutée a toujours ?,? à la place des variables réelles.

Répondre

0

Ce:

$sql = <<<SQL 
    "INSERT INTO user (username,password) VALUES (:username,:password)" 
SQL; 

devrait être:

$sql = <<<SQL 
    INSERT INTO user (username,password) VALUES (:username,:password) 
SQL; 

je devais enlever les guillemets doubles, je l'ai déjà utilisé <<<SQL pour lancer la chaîne et SQL; pour l'arrêter.

+0

En fait, avec des qeuries plus grandes lorsque la requête est corrigée et qu'il n'y a pas de guillemets doubles, les fonctions de liaison ne fonctionnent pas. – ufk

+0

welp mais je suppose que c'est pour une question différente. – ufk

Questions connexes