我曾经将其作为传递给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()呢?
发布于 2011-02-12 22:23:06
使用PDO::EXEC时,返回的结果不是PDOStatement,而是受影响行的整数。
当使用PDO::QUERY时,返回的结果是一个PDOStatement。
所以答案是,这取决于你需要对数据做什么,如果你需要运行查询而不对结果做任何事情,那么你应该使用exec来执行查询,否则如果你需要行数,那么返回的数据应该使用pdo::query,然后使用调用返回的结果。
关于这个bug,您可以采取以下几种方法
使用1002
第二个问题可能在64位操作系统和一些windows配置上有一些问题。
错误信息:http://bugs.php.net/bug.php?id=47224
发布于 2011-02-12 22:36:13
PDO::exec()应用于不返回结果集的查询,如delete语句或'set‘。当您期望返回结果集时,应该使用PDO::query()。它向您返回一个PDOStatement对象,您可以遍历该对象以获得各个行。但是请注意,如果您在查询中使用来自不受信任来源的数据,则准备好的语句将是处理这两种查询的最佳方法(但您可能知道这一点)。
因此,在您的示例中,PDO::exec()将是正确的。但是,您确定将set names命令作为最后一个值传递给PDO::__construct()不起作用吗?它适用于我,并且我在Windows上有PHP5.3。你能发布更多关于你正在做什么的示例代码吗?
https://stackoverflow.com/questions/4978481
复制相似问题