php - PDO::exec() 还是 PDO::query()?

标签 php utf-8 pdo

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

$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()?

最佳答案

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

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

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


关于该错误,您可以采取多种解决方法

  • 安装PDO_MYSQL
  • MYSQL_ATTR_INIT_COMMAND 替换为 1002
  • 将您的 PHP 更新到已通过并修补的最新稳定版本。

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

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

关于php - PDO::exec() 还是 PDO::query()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4978481/

相关文章:

php - 在 PHP 中迭代 MASSIVE CSV 文件的最佳实践

git - 使 git diff 正确显示 UTF8 编码的字符

javascript - 浏览器缓冲区到字符串的转换在浏览器和nodejs中不一样

python - 我无法读取文件,因为我收到 "UnicodeDecodeError: ' utf- 8' codec can' t 解码“错误

php - PDO inTransaction() 在数据库异常后返回 false

php - Codeigniter:使用 PDO 而不是 mysql

php - Jquery onmousedown 需要双击?

mysql - 网站被利用,疑似SQL注入(inject)+PHP检查绕过,但无法解释后者是如何进行的

php - 即使使用 catch block ,PDO 未捕获的 PDO 异常也会在连接错误时转储密码

php - 注意:尝试获取非对象错误的属性