我正在使用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()给了我一个空洞的结果。有人可以向我解释我犯了哪些错误吗?
答案 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。