2010-03-22 2 views
0

Теперь я пытаюсь сделать forking в php. Я хотел бы сделать некоторый запрос и обновление в дочернем процессе. проблема в том, что всякий раз, когда дочерний процесс заканчивается, он закрывает соединение, из-за которого другие запросы терпят неудачу. Следующий мой образец кода!Проблемы с подключением базы данных PHP и mysql

#!/usr/local/bin/php 
<?php 
set_time_limit(0); # forever program! 
$db = mysql_connect("server","user","pwd"); 
mysql_select_db("schema",$db); 
$sql = "query"; 
$res = mysql_query($sql,$db); 
while($rows = mysql_fetch_array($res)) { 
    $rv = pcntl_fork(); 
    if($rv == -1){ 
    echo "forking failed"; 
    } 
    elseif($rv){ 
    echo "parent process $rv\n"; 
    $db = mysql_connect("server","user","pwd",true); 
    mysql_select_db("schema",$db); 
    } 
    else{ 
    echo "child process $rv\n"; 
    $sql1 = "another query"; 
    $res1 = mysql_query($sql1,$db); 
    while($messages = mysql_fetch_array($res1)) { 
     $sql2 = "update query"; 
     mysql_query($sql2,$db); 
    } 
    exit(0); 
    //it terminates both child process and mysql connection! 
    } 
} 
?> 

ответ

2

Старайтесь не открывать другое соединение SQL в родительском процессе, и создать другую ссылку на MySQL в каждом дочернем потоке с другой переменной идентификатор связи.

<?php 
    set_time_limit(0); # forever program! 
    $db = mysql_connect("server","user","pwd"); 
    mysql_select_db("schema",$db); 
    $sql = "query"; 
    $res = mysql_query($sql,$db); 
    while($rows = mysql_fetch_array($res)) { 
    $rv = pcntl_fork(); 
    if($rv == -1){ 
     echo "forking failed"; 
    } 
    elseif($rv){ 
     echo "parent process $rv\n"; 
     // do nothing with connection here, use old one ($db) 
    } 
    else 
    { 
     $db2 = mysql_connect("server","user","pwd", true); 
     echo "child process $rv\n"; 
     $sql1 = "another query"; 
     $res1 = mysql_query($sql1,$db2); 
     while($messages = mysql_fetch_array($res1)) { 
     $sql2 = "update query"; mysql_query($sql2,$db2); 
     } 
     exit(0); 
    } 
} 
?> 
+0

Спасибо, что это работает для меня! –

Смежные вопросы