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' ....)
を呼び出すことで、明示的に接続を閉じることができます。私はそれがmysqlログで何かだと言います –
いくつかの考え:実際には、PDOの 'query()'関数は結果、つまり 'SELECT'を返すものです。それ以外の場合は、 'exec()'([単一の関数呼び出しでSQL文を実行する](http://php.net/manual/en/pdo.exec.php)を使用する必要があります。だから、 'call() 'のために' query() '関数が使われると、何かが' exec() 'ステートメントに変換されなければなりません。 PDOまたはデータベースエンジンを使用します。なぜあなたは準備声明を得ているのでしょうか? –
@RyanVincent MySQLプロシージャが返されます。したがって、クエリメソッドではなくexecメソッドです。ところで、 – user634545