Неопределенная ошибка индекса, несколько дБ соединений в файле

У меня есть php файл / скрипт, работающий в powershell, который предназначен для подключения к одному серверу БД, выбора информации, подключения к другому серверу БД / сервера и вставки этой информации.

У меня были проблемы с соединениями, но теперь у меня это работает, за исключением того, что когда я запускаю этот скрипт в powershell, я получаю кучу ошибок, 5, если быть точным (что соответствует записям в базе данных в настоящее время) о неопределенном индексе.

Это влияет на строки с 51 по 55, которые являются концом моего кода, VALUES раздел, начиная с ON DUPLICATE KEY линия. Моя таблица в MySQL Workbench имеет те же имена столбцов, значения индекса и т. Д., Что и моя тестовая таблица, где я выполняю этот сценарий для тестирования в Workbench. Я неправильно называю эти значения в своем операторе вставки?

    <?php

$servername = "//";
$username = "//";
$password = "//";

$servername2 = "//";
$username2 = "//";
$password2 = "//";

// Create connection
$conn = new mysqli($servername, $username, $password);
$conn2 = new mysqli($servername2, $username2, $password2);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";

// Check connection2
if ($conn2->connect_error) {
die("Connection failed: " . $conn2->connect_error);
}
echo "Connected successfully";

$data = mysqli_query($conn, " SELECT c.extension
,RESPONSIBLEUSEREXTENSIONID
, sum(Duration) AS Total_Talk_Time_seconds
, round(sum(Duration) / 60,2) AS Total_Talk_Time_minutes
, sum(if(LEGTYPE1 = 1,1,0)) AS Total_Outbound
, sum(if(LEGTYPE1 = 2,1,0)) AS Total_Inbound
, sum(if(Answered = 1,0,1)) AS Total_Missed
, count(DISTINCT b.NOTABLECALLID) AS Total_Calls
, NOW() AS time
, curdate() AS date
FROM cdrdb.session a
LEFT JOIN cdrdb.callsummary b
ON a.NOTABLECALLID = b.NOTABLECALLID
LEFT join cdrdb.mxuser c
ON a.RESPONSIBLEUSEREXTENSIONID = c.EXTENSIONID
WHERE b.ts >= curdate()
AND c.extension IN (7295,7306,7218,7247,7330,7000,7358)
group by c.extension");foreach ($data as $d) {

$stmt = mysqli_prepare($conn2, "Insert into jfi.ambitionphone(Extension, ExtID, Total_Talk_Time_seconds,
Total_Talk_Time_minutes,Total_Outbound, Total_Inbound,
Missed_Calls, Total_Calls, Time_of_report,Date_of_report  )
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
ON duplicate key update
Total_Talk_Time_seconds = values(Total_Talk_Time_seconds),
Total_Talk_Time_minutes = values(Total_Talk_Time_minutes),
Total_Outbound = values(Total_Outbound),
Total_Inbound = values(Total_Inbound),
Missed_calls = values(Missed_Calls),
Total_Calls = values(Total_Calls),
Time_of_report = values(Time_of_report),
Date_of_report = values(Date_of_report)");
mysqli_stmt_bind_param($stmt, "ssiiiiiiss", $d['extension'], $d['RESPONSIBLEUSEREXTENSIONID'],
$d['Total_Talk_Time_seconds'], $d['Total_Talk_Time_minutes'],
$d['Total_Outbound'], $d['Total_Inbound'], $d['Total_Missed'], $d['Total_Calls'],
$d['time'], $d['date']);

mysqli_stmt_execute($stmt);

}

?>

ОБНОВИТЬ:

Это запрос mysql, который я конвертирую в этот скрипт PHP, для контекста:

Insert into test.ambition_test(Extension, ExtID, Total_Talk_Time_seconds,
Total_Talk_Time_minutes,Total_Outbound, Total_Inbound,
Missed_Calls, Total_Calls, Time_of_report,Date_of_report  )
SELECT
c.extension
,RESPONSIBLEUSEREXTENSIONID
, sum(Duration)
, round(sum(Duration) / 60,2)
, sum(if(LEGTYPE1 = 1,1,0))
, sum(if(LEGTYPE1 = 2,1,0))
, sum(if(Answered = 1,0,1))
-- , count(DISTINCT b.NOTABLECALLID) as Total_Calls
, sum(if(LEGTYPE1 = 1,1,0)) + sum(if(LEGTYPE1 = 2,1,0))   as total_calls
, NOW()
, curdate()
FROM cdrdb.session a
LEFT JOIN cdrdb.callsummary b
ON a.NOTABLECALLID = b.NOTABLECALLID
LEFT join cdrdb.mxuser c
ON a.RESPONSIBLEUSEREXTENSIONID = c.EXTENSIONID
WHERE b.ts >= curdate()
AND c.extension IN (7295,7306,7218,7247,7330,7000,7358)
group by c.extension
ON duplicate key update Total_Talk_Time_seconds
=values(Total_Talk_Time_seconds),
Total_Talk_Time_minutes =values(Total_Talk_Time_minutes),
Total_Outbound = values(Total_Outbound),
Total_Inbound = values(Total_Inbound),
Missed_calls = values(Missed_calls),
Total_Calls = values(Total_Calls),
Time_of_report = NOW();

0

Решение

Проблема в том, что вы не присваивали псевдонимы вызовам функций в первом запросе. Так что нет столбцов с именем Total_Outbound, Total_Inboundи т. д. должно быть:

$data = mysqli_query($conn, " SELECT c.extension
,RESPONSIBLEUSEREXTENSIONID
, sum(Duration) AS Total_Talk_Time_seconds
, round(sum(Duration) / 60,2) AS Total_Talk_Time_minutes
, sum(if(LEGTYPE1 = 1,1,0)) AS Total_Outbound
, sum(if(LEGTYPE1 = 2,1,0)) AS Total_Inbound
, sum(if(Answered = 1,0,1)) AS Total_Missed
, count(DISTINCT b.NOTABLECALLID) AS Total_Calls
, NOW() AS time
, curdate() AS date
FROM cdrdb.session a
LEFT JOIN cdrdb.callsummary b
ON a.NOTABLECALLID = b.NOTABLECALLID
LEFT join cdrdb.mxuser c
ON a.RESPONSIBLEUSEREXTENSIONID = c.EXTENSIONID
WHERE b.ts >= curdate()
AND c.extension IN (7295,7306,7218,7247,7330,7000,7358)
group by c.extension");

Тогда вам также нужно исправить синтаксис вашего INSERT запрос. Он не указывает значения для вставки, так как он должен знать, если вы создаете дубликат ключа? И вы должны использовать подготовленное заявление, чтобы избежать цитирования вопросов.

$stmt = mysqli_prepare($conn2, "Insert into jfi.ambitionphone(Extension, ExtID, Total_Talk_Time_seconds,
Total_Talk_Time_minutes,Total_Outbound, Total_Inbound,
Missed_Calls, Total_Calls, Time_of_report,Date_of_report  )
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
ON duplicate key update
Total_Talk_Time_seconds = values(Total_Talk_Time_seconds),
Total_Talk_Time_minutes = values(Total_Talk_Time_minutes),
Total_Outbound = values(Total_Outbound),
Total_Inbound = values(Total_Inbound),
Missed_calls = values(Missed_Calls),
Total_Calls = values(Total_Calls),
Time_of_report = values(Time_of_report),
Date_of_report = values(Date_of_report)");

foreach ($data as $d) {
mysqli_stmt_bind_param($stmt, "ssiiiiiiss", $d['extension'], $d['RESPONSIBLEUSEREXTENSIONID'],
$d['Total_Talk_Time_seconds'], $d['Total_Talk_Time_minutes'],
$d['Total_Outbound'], $d['Total_Inbound'], $d['Total_Missed'], $d['Total_Calls'],
$d['time'], $d['date']);
mysqli_stmt_execute($stmt);
}
1

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector