2016-09-01 14 views
1

PDOを使用してステートメントを閉じるにはどうすればよいですか?私が一般的なMySQLログをチェックすると、決してクローズコマンドに遭遇することはありません。 (command_type:Close stmt)。PHP PDO - 閉じるステートメント - max_prepared_stmt_countステートメントを作成できません

現在のところ、MySQLは、これらのクエリのいくつかの後に "max_prepared_stmt_count文以上を作成できません"をスローします。

奇妙なことは、準備するものがない場合でも、PDOがクエリを準備することです。なぜ単にクエリを実行するだけではないのですか(command_type:Execute)?

スニペット

// Executes a SQL query and returns the PDO statement 
$statement = $pdo->query(sprintf('CALL TEST_PROCEDURE(%s)', implode(',', $parameters))); 

// Retrieve the result of the query 
$result = current($statement->fetchAll(PDO::FETCH_OBJ)); 

$statement = null; 

一般的なログ

select * from mysql.general_log where argument like "%call%" \G; 
... 
    event_time: 2016-09-01 10:34:40 
    user_host: root[root] @ localhost [127.0.0.1] 
    thread_id: 4111 
    server_id: 0 
command_type: Prepare 
    argument: CALL TEST_PROCEDURE(234,'989',1,'3353' ....) 
*************************** 2. row *************************** 
command_type: Execute 
    argument: CALL TEST_PROCEDURE(234,'989',1,'3353' ....) 
+0

を呼び出すことで、明示的に接続を閉じることができます。私はそれがmysqlログで何かだと言います –

+0

いくつかの考え:実際には、PDOの 'query()'関数は結果、つまり 'SELECT'を返すものです。それ以外の場合は、 'exec()'([単一の関数呼び出しでSQL文を実行する](http://php.net/manual/en/pdo.exec.php)を使用する必要があります。だから、 'call() 'のために' query() '関数が使われると、何かが' exec() 'ステートメントに変換されなければなりません。 PDOまたはデータベースエンジンを使用します。なぜあなたは準備声明を得ているのでしょうか? –

+0

@RyanVincent MySQLプロシージャが返されます。したがって、クエリメソッドではなくexecメソッドです。ところで、 – user634545

答えて

0

あなたは何の準備()メソッドを使用しないときPDOは何も準備していない$statement->closeCursor();

+0

私もcloseCursorを試しましたが、差はありませんでした。 – user634545

+0

'$ statement = null;'は効果的に同じことをしています。あなたが評判のポイントを上げようとしているこの質問は、あなたが思っているほどばかげているわけではありません。 –

+0

@YourCommonSenseうわー、あなたの貴重なコメントを見逃してしまいました。 :) –

関連する問題