PHP цикл дБ выполнить несколько, иногда не удается

Я использую следующие действия multi curl для проверки состояния различных веб-страниц. Функция сначала получает различных пользователей, а затем для каждого пользователя выполняет многоплановый запрос, проверяя различные веб-страницы. Кажется, что все работает нормально, за исключением того, что иногда функция db-> execute кажется неудачной для всех, кроме 1 пользователя. Функция добавляет только один набор записей и игнорирует остальные массивы от других пользователей.

Кто-нибудь может понять, почему это может происходить?

// open db
$db = GetDb();

// fetch user data
$query = 'SELECT * FROM userinfo ORDER BY user_id DESC';
$dbresult = $db->Execute($query);
$lists = array();
while ($dbresult && $row = $dbresult->FetchRow()) {
$one=array();
$user_id = $row['user_id'];

// create array
$data = array(array());

$data[0]['extra'] = array();
$data[0]['extra']['user_id']   = $user_id;
$data[0]['extra']['monitor_id']   = '2';
$data[0]['url']  = 'http://www.google.com';
$data[0]['post'] = 'google';

$data[1]['extra'] = array();
$data[1]['extra']['user_id']   = $user_id;
$data[1]['extra']['monitor_id']   = '6';
$data[1]['url']  = 'http://www.yahoo.com';
$data[1]['post'] = 'yahoo';

$data[2]['extra'] = array();
$data[2]['extra']['user_id']   = $user_id;
$data[2]['extra']['monitor_id']   = '4';
$data[2]['url']  = 'http://www.amazon.com';
$data[2]['post'] = 'amazon';

$data[3]['extra'] = array();
$data[3]['extra']['user_id']   = $user_id;
$data[3]['extra']['monitor_id']   = '18';
$data[3]['url']  = 'http://www.bing.com';
$data[3]['post'] = 'bing';

$r = multiRequest($data);

echo '<pre>';
print_r($r);

$aValues = array();
foreach ($r as $aRow) {
$aValues[] = "'" . implode("','", $aRow) . "'";
}
$values = "(" . implode("), (", $aValues) . ")";
$sQuery = "insert into `time_user_$user_id` (`user_id`, `monitor_id`, `monitor_type`, `monitor_name`, `response_code`, `user_message`, `create_date`, `string`, `status`) values $values";
$db->Execute($sQuery);

}

// close db
mysqli_close($db);

0

Решение

Как я понимаю, класс

$db = GetDb();

Использует шаблон проектирования с именем Singleton, который создает экземпляр ONCE и отменяет предыдущие вызовы.
Чтобы это исправить, НЕ используйте singleton при попытке соединения с PDO \ mysqli. Создайте соединение и создайте для него новую переменную каждый раз, когда вы хотите позвонить в базу данных.

0

Другие решения

Других решений пока нет …