【发布时间】:2013-04-23 00:20:59
【问题描述】:
我正在使用 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() 给了我一个空的结果。有人可以向我解释我在哪里犯了错误吗?
【问题讨论】:
-
使用
foreach($UpdateSql->fetchAll() as $row)或while($row = $UpdateSql->fetch())。execute()的返回只是一个布尔值,表示一切是否正常。另外,严格来说你不应该引用你的参数(':user'应该是:user)。 -
@Wrikken 当我不引用我的参数时收到以下错误 警告:PDO::query() [pdo.query]: SQLSTATE[42000]: 语法错误或访问冲突: 1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 19 行 C:\xampp\htdocs\drug_center\dc_login.php 的第 1 行的 ':user AND pass = :pass' 附近使用正确的语法 致命错误:调用第 21 行 C:\xampp\htdocs\drug_center\dc_login.php 中非对象的成员函数 bindValue()
-
@Brian:好吧。这是正确的。我说你应该在上面的
->prepare()声明中这样做。不是->query()。这是两个不同的东西,非常不同。 -
@Wrikken 请解释......
-
prepare()方法准备 sql 语句,您可以使用execute()甚至多次使用不同的变量执行该语句。使用query(),您只需直接查询数据库即可。