PDO查询不显示数据

时间:2017-07-20 21:41:42

标签: php mysql pdo

我想将一个网站从一些写得不好的MySQLi迁移到干净的PDO。

我看过三个相似的问题和他们的答案,这是一个简单的问题,但他们都没有给我结果。这是我的代码:

$state = "Alaska";

//trying to implement PDO here
$sql = "SELECT * FROM sales WHERE state = ? ORDER BY type";
$result = $conn->prepare($sql);
$result->execute(array($state));

/* 
this was the old, successfully working way before
$sql = "SELECT * FROM sales WHERE state = '$state' ORDER BY type";
$result = $conn->query($sql);
*/

本网站上的先前问题向我展示了看起来像我的PDO实施的答案,但我的工作并不起作用。我确保PDO类存在并且扩展已加载。

如果您看到错误,请与我们联系!

1 个答案:

答案 0 :(得分:4)

除了库中的差异之外,两者之间的区别在于,一个使用直接query()mysqli_*),而另一个使用预备语句。无论哪个API正在运行,处理都会有所不同。

使用MySQLi时,执行

$result = $conn->query($sql);

$result作为mysqli-result对象,它保存数据。您可以使用mysqli_result::fetch_assoc()来获取数据。但是,当您使用PDO::prepare()时,您的$result变量将是PDOStatement - 这有点不同。您需要首先在其上运行fetch()方法,然后您可以使用它的返回值,因此

$state = "Alaska";
$sql = "SELECT * FROM sales WHERE state = ? ORDER BY type";
$stmt = $conn->prepare($sql);
$stmt->execute(array($state));
$result = $stmt->fetch(PDO::FETCH_ASSOC);

请注意,我已更改变量的名称。现在$result是一个数组(如果有任何结果被提取),您可以像通常在获取关联数组时那样使用它。如果没有结果,PDOStatement::fetch()将返回布尔值false

var_dump($result['state']);

您可以将fetch()方法循环为

while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {

如果您期望多行。如上所示,不使用循环使用$result

请注意,这假设有效的PDO连接。请注意,不能交换任何MySQL库,mysql_mysqli_*和PDO都是动物园中不同的动物。