PDO – bindParam no funciona

Estoy creando una clase PDO para usar en mis proyectos, pero como soy nuevo en esto, no puedo vincular parámetros a una statement sql preparada, sin error alguno. Aquí está la función que es ment para hacerlo:

# ::bindParam public static function bind() { # get function arguments $args = func_get_args(); # check for any arguments passed if (count($args) bindParam($parameter, $variable, $data_type, $length) or die('error'); } } 

y una statement sql preparada:

 SELECT * FROM `users` WHERE `email` = :email AND `password` = :password LIMIT 1 

¿Alguien me puede apuntar en la dirección correcta? La consulta no produce errores en este punto. Tenga en cuenta que estoy asumiendo que el problema está aquí, aunque puede que no, ya que solo estoy usando bindParam () y prepare ().

editar – código de activación

  $email = $_POST['email']; $password = $_POST['password']; $password = hash('sha256', $password); $this->db->prepare('SELECT * FROM `users` WHERE `email` = :email AND `password` = :password LIMIT 1'); $this->db->bind( array(':email', $email), array(':password', $password) ); $status = $this->db->execute(); if ($status) { $result = $this->db->fetch('assoc'); $this->template->user = $result; } else { $this->template->user = false; } 

Como @YourCommonSense ya se mencionó, la interfaz de PDO sin procesar es un poco más clara, sin embargo, el problema probablemente se deba al uso de la función PDOStatement::bindParam() lugar de a PDOStatement::bindValue() .

La diferencia entre esos dos es que, el primero toma una referencia variable , que se sobrescribe constantemente en su ciclo foreach , mientras que el último toma el valor real de la variable.


Si está buscando una interfaz de conexión de base de datos más amigable, ¿por qué no prueba Doctrine DBAL ?

Solo deshazte de esta función, PDO ya la tiene

 $email = $_POST['email']; $password = $_POST['password']; $password = hash('sha256', $password); $this->db->prepare('SELECT * FROM `users` WHERE `email` = :email AND `password` = :password LIMIT 1'); $stmt = $this->db->execute(array(':email'=> $email,':password' => $password)); $this->template->user = $this->db->fetch(); 

Ese es todo el código que necesita (suponiendo que la ejecución de su clase es un PDO normal ejecutado)

O bien, para hacerlo en PDO sin procesar:

 $email = $_POST['email']; $password = $_POST['password']; $password = hash('sha256', $password); $sql = 'SELECT * FROM users WHERE email = ? AND password = ? LIMIT 1'; $stmt = $this->db->prepare($sql); $stmt->execute(array($email, $password)); $this->template->user = $stmt->fetch(); 

Por lo tanto, parece que su clase requiere más código que PDO sin formato. ¿Estás seguro de que necesitas esta clase?