php - PDO 查询不显示数据

标签 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 类存在并且已加载扩展。

如果您看到错误,请告诉我!

最佳答案

两者之间的区别,除了库的不同外,一个是使用直接的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() 将返回 bool 值 false

var_dump($result['state']);

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

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

如果您期望不止一行。使用 $result 就像没有循环一样,如上所示。

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

关于php - PDO 查询不显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45225683/

相关文章:

php - 如何在带有 'IN' 运算符的 Mysql 查询中使用数组值?

php - 从 PDO 查询返回一个包含列名的二维数组

php - Wordpress paginate_links - 第一页始终与当前页面相同

php - PHP 中的 SQL - 需要另一双眼睛

php - Ajax 调用加载好友并在个人资料页面上显示

java - 即使行存在,executeQuery Mysql - Java 中的 ResultSet 也为 false

mysql - 按问题联合排序

php - 如何将 mySQL 转换为 PDO

PHP PDO 连接效率

php - Doctrine 1.2 控制流函数 "IF"