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] tony2001@php.net
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] tony2001@php.net
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] tony2001@php.net
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