[英]PDO::exec() or PDO::query()?
我曾經把它作為傳遞給PDO構造函數的選項之一(第4個參數):
$aOptions[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
但是剛發現由於某些bug,它在Windows上的某些php版本上無效(在5.3中不起作用)。
現在我需要使用$pdo->exec("SET NAMES utf8");
運行SET NAMES utf8
$pdo->exec("SET NAMES utf8");
或$pdo->query("SET NAMES utf8");
在實例化pdo對象之后。 那么,我應該使用哪一個 - exec()或query()?
使用PDO::EXEC
,返回的結果不是PDOStatement
而是受影響行的整數。
使用PDO::QUERY
,返回的結果是PDOStatement
。
所以答案是它取決於你需要對數據做什么,如果你需要運行查詢而不對結果做任何事情,那么你應該使用exec
來執行查詢,否則如果你需要行數,返回的數據應該使用pdo::query
然后使用調用返回的結果。
關於這個bug你可以采取幾種方法
PDO_MYSQL
MYSQL_ATTR_INIT_COMMAND
替換為1002
第二個問題可能在64位的操作系統和一些Windows配置上有一些問題。
PDO :: exec()應該用於不返回結果集的查詢,例如delete語句或'set'。 當您希望返回結果集時,應該使用PDO :: query()。 它會向您返回一個PDOStatement對象,您可以迭代它以獲取各行。 請注意,如果您在查詢中使用來自不受信任來源的數據,那么准備好的語句將是進行任何一種查詢的最佳方式(但您可能知道這一點)。
所以,在你的情況下,PDO :: exec()是正確的。 你確定將set names命令傳遞給PDO :: __ construct()作為最后一個值不起作用嗎? 它適用於我,我在Windows上有PHP 5.3。 你能發布一些你正在做的事情的示例代碼嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.