psyc0der
psyc0der

Reputation: 409

PDO self prepare returns an empty string

I connected to the DB via this.

 public static function connect() {
  try {
    self::$db_handle = new PDO("mysql:host=".SERVER.";dbname=".DBNAME,USER, PASSWORD);
    self::$db_handle->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    echo "Successful connected to DB<br/>";
  }
  catch(PDOException $e) {
    echo "Conncection failed: " . $e->getMessage();
    exit();
  }
}

It echoes Successful Connection. So am guessing, there is no issue with the connectivity.

Now I use the following code to query the DB.

    $sql=func_get_arg(0);
    $params=array_slice(func_get_args(), 1);

    $statement=self::$db_handle->prepare($sql);

    echo "<br/>Stat: ".$statement."</br>"; //Just for testing purposes

    if($statement===false){
       echo "False";
      return false;
    }
    if(count($params)==0){
      $results=$statement->execute();
    }
    else
      $results=$statement->execute($params);
    if($results===false)
      return false;
    else{
      return $statement->fetchAll(PDO::FETCH_ASSOC);
    }

I have no clue why it echoes False. The statement which I tried to echo is an empty string.

$sql =

 "SELECT * FROM `users` where $key = ?"

and $params is the email address itself.

I am unable to detect my fault. Kindly help. Thanks :)

Upvotes: 0

Views: 361

Answers (2)

Your Common Sense
Your Common Sense

Reputation: 157872

change it to this

public static function connect()
{
    self::$db_handle = new PDO("mysql:host=".SERVER.";dbname=".DBNAME,USER, PASSWORD);
    self::$db_handle->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    self::$db_handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
}

Upvotes: 1

Ryan
Ryan

Reputation: 14649

$PDO = <yourclass>::connect();
$statement = $PDO->prepare("SELECT * FROM users WHERE key=?");
$statement->execute(array(1));
echo $PDO->lastInsertId();

Upvotes: 0

Related Questions