Этот сценарий работал отлично в течение многих лет и все еще работает нормально при определенных обстоятельствах, но я пытаюсь проверить другое обстоятельство, но он терпит неудачу без каких-либо сообщений об ошибках.
Я боролся с этим весь день и сейчас зашел в тупик.
Я использую следующее с 3-мя почтовыми ящиками электронной почты - я проверяю электронную почту, использую детали в теме, чтобы подтвердить клиента, а затем устанавливаю объект клиента перед вставкой содержимого электронной почты против клиента.
Это было и до сих пор работает нормально для существующих 2 почтовых ящиков, однако 3-й (новый почтовый ящик) просто перестает работать на $this->mysqli->query($query)
, возвращая false.
Он извлекает письмо правильно, как я вижу, выводя тему письма - у него есть, он прочитал его, правильно построил SQL-запрос ... Он просто не будет успешно выполнен ...
//Build the query
$query = "SELECT id,
parent_id,
name,
storeno,
make,
active_advisors,
address,
primary_contact,
primary_phone,
primary_email,
secondary_contact,
secondary_phone,
secondary_email,
daily_email_receipients,
wty_analysis_email_recipients,
created,
expiry,
modified,
modified_by,
active,
customer_type
FROM Customer
WHERE LOWER(name) = LOWER('".addslashes($emailHeader['customername'])."')
AND LOWER(storeno) = LOWER('".$emailHeader['storeno']."')
AND LOWER(make) = LOWER('".$emailHeader['make']."')";
//debug query
print $query;
//Execute the query and validate that it was executed without issue
if( $result = $this->mysqli->query($query) ) {
//Print row count for debugging
print "Select returned ".mysqli_num_rows($result)." matching rows for 'Customer' lookup.";
//Check to see if we got what we expected (an single exact match!)
if (mysqli_num_rows($result)==1) {
//Transfer the result into a usable Object
while ($row = $result->fetch_object()) {
$this->setCustomerInformation($row);
}
}
// If we get 0 then we have no match
// If we get > 1 then we have a problem (and still no match)
else {
print "Could not match email details to a customer: (".implode(",",$emailHeader).")";
return false;
}
}
else {
print 'Mysqli Query returned false: " ('.serialize($this->mysqli).')';
print mysqli_errno($this->mysqli);
print mysqli_error($this->mysqli);
return false;
}
Выходы:
SELECT id,
parent_id,
name,
storeno,
make,
active_advisors,
address,
primary_contact,
primary_phone,
primary_email,
secondary_contact,
secondary_phone,
secondary_email,
daily_email_receipients,
wty_analysis_email_recipients,
created,
expiry,
modified,
modified_by,
active,
customer_type
FROM Customer
WHERE LOWER(name) = LOWER('XXXXXXXX')
AND LOWER(storeno) = LOWER('S01')
AND LOWER(make) = LOWER('FO')
Mysqli Query returned false: " (O:6:"mysqli":19:{s:13:"affected_rows";N;s:11:"client_info";N;s:14:"client_version";N;s:13:"connect_errno";N;s:13:"connect_error";N;s:5:"errno";N;s:5:"error";N;s:10:"error_list";N;s:11:"field_count";N;s:9:"host_info";N;s:4:"info";N;s:9:"insert_id";N;s:11:"server_info";N;s:14:"server_version";N;s:4:"stat";N;s:8:"sqlstate";N;s:16:"protocol_version";N;s:9:"thread_id";N;s:13:"warning_count";N;})
Что я сделал до сих пор:
- Я вывел $ query и запустил его в MySQL, и он успешно вернул правильный результат
- Я сравнил объект mysqli на всех 3 проверках почтовых ящиков, и они идентичны
- Я запустил процесс с письмом в каждом почтовом ящике (первый 2 = успех) и третий сбой
- Я запустил процесс, только в 3-м почтовом ящике была только почта = ошибка (возможно, я сбрасывал соединение)
У меня закончились идеи - проверить и не знаю, куда идти
Вывод ошибки равен NULL
Дополнительный тест - этот процесс выполняется через задание cron - я только что запустил процесс вручную через браузер, и он работает ...
- Версия PHP в браузере и клиенте совпадают
- Объекты Mysqli идентичны в браузере и CLI
- mysqli-> Query () результат отличается:
CLI:
NULL
Браузер:
mysqli_result Object
(
[current_field] =>
[field_count] =>
[lengths] =>
[num_rows] =>
[type] =>
)
Только что открыл, mysqli-> stat ()
CLI: NULL
Браузер: Населенный
Очевидно, что существует проблема с объектом MySQLi