Разветвление PHP и проблема с подключением к базе данных mysql - PullRequest
0 голосов
/ 22 марта 2010

Я сейчас пытаюсь сделать разветвление в php.Я хотел бы сделать некоторые запросы и обновления в дочернем процессе ... проблема в том, что всякий раз, когда дочерний процесс завершает работу, он закрывает соединение, что приводит к сбою других запросов.Ниже приведен пример кода !!

#!/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!
  }
}
?>

1 Ответ

2 голосов
/ 22 марта 2010

Старайтесь не открывать другое соединение 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); 
    } 
} 
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...