首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO::exec()还是PDO::query()?

PDO::exec()还是PDO::query()?
EN

Stack Overflow用户
提问于 2011-02-12 22:09:17
回答 2查看 25.1K关注 0票数 30

我曾经将其作为传递给PDO构造函数的选项之一(第四个参数):

代码语言:javascript
复制
$aOptions[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";

但刚刚发现,由于一些bug,它在Windows上的某些php版本上不起作用(在5.3中不起作用)。

现在,我需要使用任一$pdo->exec("SET NAMES utf8");运行SET NAMES utf8

$pdo->query("SET NAMES utf8");

就在实例化pdo对象之后。那么,我应该使用哪个- exec()或query()呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-12 22:23:06

使用PDO::EXEC时,返回的结果不是PDOStatement,而是受影响行的整数。

当使用PDO::QUERY时,返回的结果是一个PDOStatement

所以答案是,这取决于你需要对数据做什么,如果你需要运行查询而不对结果做任何事情,那么你应该使用exec来执行查询,否则如果你需要行数,那么返回的数据应该使用pdo::query,然后使用调用返回的结果。

  • http://www.php.net/manual/en/pdo.query.php
  • http://php.net/manual/en/pdo.exec.php

关于这个bug,您可以采取以下几种方法

使用1002

  • Update
    • 安装到最新的稳定版本,该版本已通过并安装了补丁。

第二个问题可能在64位操作系统和一些windows配置上有一些问题。

错误信息:http://bugs.php.net/bug.php?id=47224

票数 53
EN

Stack Overflow用户

发布于 2011-02-12 22:36:13

PDO::exec()应用于不返回结果集的查询,如delete语句或'set‘。当您期望返回结果集时,应该使用PDO::query()。它向您返回一个PDOStatement对象,您可以遍历该对象以获得各个行。但是请注意,如果您在查询中使用来自不受信任来源的数据,则准备好的语句将是处理这两种查询的最佳方法(但您可能知道这一点)。

因此,在您的示例中,PDO::exec()将是正确的。但是,您确定将set names命令作为最后一个值传递给PDO::__construct()不起作用吗?它适用于我,并且我在Windows上有PHP5.3。你能发布更多关于你正在做什么的示例代码吗?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4978481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档