我曾经将此作为选项之一(第 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 配置上存在一些问题。
关于php - PDO::exec() 还是 PDO::query()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4978481/