簡體   English   中英

PDO :: exec()或PDO :: query()?

[英]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
  • 更新您的PHP到最新的穩定版本,它已被傳遞和修補。

第二個問題可能在64位的操作系統和一些Windows配置上有一些問題。

錯誤信息: http//bugs.php.net/bug.php?id = 47224

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM