如何使用PDO方法检索信息

时间:2013-04-23 00:20:59

标签: php mysql pdo

我正在使用PDO方法构建登录脚本。我想从用户帐户注册一些会话。每当我尝试从数据库中提取信息时,我都会空白。我是PDO的新手。以下是我到目前为止的情况:

try{
$conn = new PDO(...........);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$conn->exec("SET CHARACTER SET utf8");

$sql = "SELECT * FROM $table WHERE USER = ':user' AND pass = ':pass'";

$UpdateSql = $conn->prepare($sql);
$UpdateSql->bindValue(':user',$user,PDO::PARAM_STR);
$UpdateSql->bindValue(':pass',$pass,PDO::PARAM_STR);

$results = $UpdateSql->execute();

/*Here is where the error comes in
foreach($results as $row)
{
$_SESSION['account'] = $row['account'];
}
*/

/*I also tried this
foreach($UpdateSql as $row)
{
$_SESSION['account'] = $row['account'];
}
*/

}catch(PDOException $e){
echo $e->getMessage();
}

当我尝试第一个foreach()时,我收到错误警告:第26行的C:\ xampp \ htdocs \ drug_center \ dc_login.php中为foreach()提供的参数无效 foreach()给了我一个空洞的结果。有人可以向我解释我犯了哪些错误吗?

3 个答案:

答案 0 :(得分:0)

您将需要$UpdateSql->fetchAll()方法。这将为您提供可以遍历的结果集。

其次,您将通过bindValue指定参数,因此您不需要'围绕值。

$table = (in_array($table, array('table1','table2')) ? $table : false;
//make sure you put some input-validation on the $table variabel!!

if($table){
  $sql = "SELECT * FROM $table WHERE user = :user AND pass = :pass";
  //lose the ' around the :pass


  $UpdateSql = $conn->prepare($sql);
  $UpdateSql->bindValue(':user',$user,PDO::PARAM_STR);
  $UpdateSql->bindValue(':pass',$pass,PDO::PARAM_STR);

  $UpdateSql->execute();
  foreach($UpdateSql->fetchAll() AS $row){
    // do some magic
  }
}else{
  throw new Exception("Error: table not allowed", 1);
}

答案 1 :(得分:0)

执行是在SQL Server上运行存储过程,你可以

$results = $UpdateSql->fetchAll($sql);
foreach ($results as $row) 
     //stuff
}

答案 2 :(得分:0)

函数prepare()返回PDOStatement类的对象。正如PHP手册中所述,PDOStatement :: execute()不返回结果,而是返回一个布尔值来指示查询是否成功。您需要使用PDOStatement的fetch commands