gpt4 book ai didi

php - PDO 查询不显示数据

转载 作者:行者123 更新时间:2023-11-29 04:35:00 25 4
gpt4 key购买 nike

我想将一个网站从一些写得不好的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com