gpt4 book ai didi

php - 检查 PDO 执行的查询是否有要获取的结果

转载 作者:行者123 更新时间:2023-11-29 01:54:32 25 4
gpt4 key购买 nike

我有一个对象来运行我所有的数据库查询,在那个对象中我有一个名为 runQuery() 的方法,可以为任何类型的查询调用。

这只是一个示例代码:

public function runQuery($query){
$stmt->prepare($query);
$stmt->execute();

return $stmt->fetchAll();
}

我的问题是,当我运行 $stmt->errorCode(); 以查看是否一切正常时,我收到错误代码:HY000

经过一些搜索后,我发现每当我对没有任何可获取的查询执行 fetchAll() 时都会触发此错误,例如 INSERT INTOUPDATEDELETE

我的问题是,如何在不展开查询以查看第一个词是否不是这三个词之一的情况下验证执行的查询是否有要获取的内容?

最佳答案

您只是从此函数返回了错误的值

学习者经常会过度复杂他们的代码,只是因为他们不知道正确的方法,这确实简单而强大。然后他们使事情变得更加复杂,询问如何解决由最初错误过于复杂的方法引起的问题。但所有这些都可以通过一种非常简单的方式解决:

您必须返回语句,而不是行。它将使我们的功能非常方便和更有用,但它会像这个“插图代码”一样简单。它会作为副作用解决您的问题。

public function runQuery($query, $data = array()){
$stmt->prepare($query);
$stmt->execute($data);
return $stmt;
}

所有您需要的代码

想一次获取所有行?就这样调用你的函数

$obj->runQuery($sql)->fetchAll();

如您所见,在这种情况下,fetch 方法可以简单地“链接”到 runQuery() 方法调用,这要归功于称为“方法链接”的非常简洁的 OOP 语法功能。您只需要返回语句,而不是结果。

文字不多,但具有极大的灵 active 。现在您可以获得任何您想要的结果类型。

事实上,您将自己限制在一种结果集类型上,这使得获取另一种类型变得很复杂。但是 PDO 已经有数十亿个结果集类型 - 您只需要使用它们。

比如说,您只需要一个用户名。你会用你的功能做什么?麻烦嵌套数组?这个呢

$name = $obj->runQuery("SELECT name FROM users WHERE id=?",[$id])->fetchColumn();

看,PDO 已经为您提供了一个方便的方法。单行呢?

$user = $obj->runQuery("SELECT * FROM users WHERE email=?",[$email])->fetch();

或者,如果您想要获取一列,但不是作为嵌套但简单的一维数组? PDO 再次为您提供了一种方法:

$ids = $obj->runQuery("SELECT id FROM news WHERE date=?",[$date])->fetchAll(PDO::FETCH_COLUMN);

还有其他美妙的模式,我在我的文章The only proper guide on PDO 中描述过。 .要把他们都扔掉吗?真的吗?

或者,使用 DML 查询解决您最初的问题。如果你想获得受影响的行数怎么办? -

$inserted = $obj->runQuery($insertQuery,$insertData)->rowCount();

看 - 您只需要返回语句,然后使用方法链接以所需形式获得结果。

作为奖励,您甚至不需要重写使用内部 fetchAll() 调用的现有代码。如果您使用 foreach 遍历返回的结果 - 您仍然可以使用相同的代码,使用返回的语句完全相同:

$data = $obj->runQuery($sql);
foreach($data as $row) ...

-- 试一试,它有效!

关于php - 检查 PDO 执行的查询是否有要获取的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32877056/

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