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

Reply via email to