0

我一生都无法弄清楚为什么这不起作用。我有一个网站的不同区域,它使用几乎完全相同的代码,它工作得很好。我敢肯定这是显而易见的,但我对这些东西很陌生。没有错误或任何东西;它什么也不做。$name 变量工作正常(我已经测试过了),并且数据库是最新的。

try {
     $db = new PDO($dbhost, $dbuser, $dbpassword);
     $statement = $db->prepare("select first, last from users where email = $name");
     $result = $statement->fetch();
     $first = $result[first];
     $last = $result[last];
}catch(PDOException $e) {
     echo $e->getMessage();
}
4

2 回答 2

1

你必须使用 execute()

try {
$db = new PDO($dbhost, $dbuser, $dbpassword);
$statement = $db->prepare("select first, last from users where email = ?");
$statement->execute(array($name));
$result = $statement->fetch();
$first = $result[first];
$last = $result[last];}

catch(PDOException $e) {echo $e->getMessage();}
于 2012-07-23T14:11:30.200 回答
0

在实际执行查询之前,您无法获取行;您只准备了查询。最终的问题是您缺少对$statement->execute(). 正确的 PDO 习语是这样的:

$statement = $db->prepare("select first, last from users where email = ?");
if (!$statement->execute(array($name))) {
    // Handle error
}
$result = $statement->fetch();
$statement->closeCursor();

closeCursor()完成获取行后不要忘记调用。在一些不支持同一客户端并发查询的数据库系统上,不调用该函数可能会导致下一个查询执行失败。

于 2012-07-23T14:11:43.897 回答