ID: 41579 User updated by: vtsupermok at gmail dot com Reported By: vtsupermok at gmail dot com -Status: Feedback +Status: Closed Bug Type: PDO related Operating System: Window PHP Version: 5.2.3 New Comment:
o..yes...it works in php 5.2.2 thank you so much but are there any ways can get the thread id by PDO? Previous Comments: ------------------------------------------------------------------------ [2007-06-05 08:18:27] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows (zip): http://snaps.php.net/win32/php5.2-win32-latest.zip For Windows (installer): http://snaps.php.net/win32/php5.2-win32-installer-latest.msi ------------------------------------------------------------------------ [2007-06-05 08:05:15] vtsupermok at gmail dot com my php version is 5.1.2 and mysql client api version version is 4.1.7 ------------------------------------------------------------------------ [2007-06-05 08:02:27] [EMAIL PROTECTED] Please reduce the script to 20 lines max. ------------------------------------------------------------------------ [2007-06-05 07:52:25] vtsupermok at gmail dot com you have kill my previous post???thank you so much~ I have try mysql version 5.0.27 5.0.18 4.1.12a but all have the same result you can re-established a connection automatically without any errors after you kill the connection? let me post my code again. <? function dbConnect($db){ try{ $database="mysql:host={$db['host']};port={$db['port']};dbname={$db['name']}"; $pdo = new PDO($database, $db['userID'], $db['userPwd'], array(PDO::ATTR_PERSISTENT => true)); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_TIMEOUT,5); return $pdo; } catch (PDOException $e) { throw $e; } } function dbException($e,$db){ echo "<p>"; echo "Message : " . $e->getMessage() . "<br/>"; echo "File : " . $e->getFile() . "<br/>"; echo "Line : " . $e->getLine() . "<br/>"; echo "</p>"; die(); } function dbQuery($pdo,$sql,$db){ try{ return $pdo->query($sql); } catch (PDOException $e) { throw $e; } } function dbRecord($result,$db){ $resultSet=$result->fetchAll(PDO::FETCH_ASSOC); $counter=count($resultSet); if ($counter>0){ echo "<table border=1>"; for ($i=0;$i<$counter;$i++){ echo "<tr>"; foreach ($resultSet[$i] as $key => $value){ echo "<td>"."$value"."</td>"; } echo "</tr>"; } echo "</table>"; } } function dbGetThreadID($result,$db){ $id=0; $resultSet=$result->fetchAll(PDO::FETCH_ASSOC); $counter=count($resultSet); if ($counter>0){ for ($i=0;$i<$counter;$i++){ if ($resultSet[$i]['Id']>$id){ $id=$resultSet[$i]['Id']; } } } return $id; } try { $db=array( 'name'=>'abc', 'host'=>127.0.0.1', 'port'=>'3306', 'userID'=>'abc', 'userPwd'=>'123', 'charset'=>'latin1', 'encoding'=>'big-5' ); echo '1. Start <Br />'; echo '2. Connect to DB by a PERSISTENT connection<Br />'; $pdo=dbConnect($db); echo '3. query "select \'a\',\'b\',\'c\'"<Br />'; $sql="select 'a','b','c'"; $result=dbQuery($pdo,$sql,$db); echo '4. list all of the result<Br />'; dbRecord($result,$db); echo '5. query "show processlist"<br>'; $sql="show processlist"; $result=dbQuery($pdo,$sql,$db); $threadId=dbGetThreadID($result,$db); echo "7. suppose the thread id of this connection is {$threadId}. (Are there any ways to get the thread id? I use a very stupid way to GUESS the thread id)<Br />"; echo "8. kill this connection query 'kill $threadId'<Br />"; $sql="kill $threadId"; $result=dbQuery($pdo,$sql,$db); echo "9. the PERSISTENT connection was kill.<Br />"; echo "10. Now, when you refresh your page, I SUPPOSE there are 2 result may happened.<br />"; echo "Case 1, since the connection was kill so it will create a new connection automatically without throw any error. <br />"; echo "Case 2, it will throw a exception in function dbConnect() since the connection was lost when it call create PDO object<Br>"; echo "but sadly the real case is, there are no exception was throw until you make another query.<Br>"; echo "So the problem is there are no ways check the PERSISTENT connection is still alive or not in case the connection was killed or timeout<br>"; echo "by the way one more question, are there any function to get the thread id?<br>"; } catch (PDOException $e) { dbException($e,$db); } ?> ------------------------------------------------------------------------ [2007-06-05 07:34:29] [EMAIL PROTECTED] What MySQL version are you using? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/41579 -- Edit this bug report at http://bugs.php.net/?id=41579&edit=1
