Я делаю программу SQL Server to MySQL, которая позволяет синхронизировать содержимое между двумя одинаковыми таблицами.Однако у меня возникли проблемы со вставкой значений даты из столбца даты, в некоторых ячейках которого установлено значение NULL.Это должно работать так, что каждое значение из столбца даты должно преобразовываться в строку с использованием функции форматирования.Поскольку я генерирую каждую строку из массива и запускаю ее через цикл, я не могу вручную выбрать строки с пустыми значениями.Вот код (он довольно длинный, поэтому я вырезал некоторые части, поэтому, пожалуйста, потерпите меня):
//SELECT FROM SQL SERVER DB
$mssql_array = array();
$ms_sql = "SELECT * FROM health";
$mssql_query = sqlsrv_query($conn_mssql, $ms_sql);
while($row = sqlsrv_fetch_array($mssql_query))
{
//turn individual rows into array
$mssql_array[] = array(
'id' => $row['id'],
'period' => $row["period"], //date column; has NULLs in it that prevent insert
'BP' => $row['BP'],
'pulserate' => $row['pulserate'],
'temperature' => $row['temperature'],
'labresult' => $row['labresult'],
'waistline' => $row['waistline'],
'weight' => $row['weight'],
'BMI' => $row['BMI'],
'findings' => $row['findings'],
'diagnosis' => $row['diagnosis'],
'plano' => $row['plano'] ... );
}
foreach($mssql_array as $key => $value)
{
//SELECT FROM MySQL DB
$my_sql = $conn_mysql->prepare(" SELECT * FROM health
WHERE id = ?
AND period = ?
AND `BP` = ?
AND pulserate = ?
AND temperature = ?
AND labresult = ?
AND waistline = ?
AND weight = ?
AND BMI = ?
AND findings = ?
AND diagnosis = ?
AND plano = ? ... ");
$my_sql->bind_param("issssssssssssssiissssssssiiiiss", $id, $period, $BP, $pulserate, $temperature, $labresult, $waistline, $weight, $BMI, $findings, $diagnosis, $plano ... );
$id = $value["id"];
$period = $value["period"]->format('Y-m-d H:i:s'); //prevents me from converting all date values to string...
if(is_null($period))
{
unset($period);
}
$BP = $value["BP"];
$pulserate = $value["pulserate"];
$temperature = $value["temperature"];
$labresult = $value["labresult"];
$waistline = $value["waistline"];
$weight = $value["weight"];
$BMI = $value["BMI"];
$findings = $value["findings"];
$diagnosis = $value["diagnosis"];
$plano = $value["plano"]; ...
$my_sql->execute();
$num_rows = $my_sql->num_rows();
$my_sql->close();
//PREPARE INSERT INTO MySQL DB
$sql = $conn_mysql->prepare("INSERT INTO `health` VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");//31 total
$sql->bind_param("issssssssssssssiissssssssiiiiss", $id, $period, $BP, $pulserate, $temperature, $labresult, $waistline, $weight, $BMI, $findings, $diagnosis, $plano ... );
$id = $value["id"];
$period = $value["period"]->format('Y-m-d H:i:s'); //...because it stops the process when it encounters a NULL value
if(is_null($period))
{
unset($period);
}
$BP = $value["BP"];
$pulserate = $value["pulserate"];
$temperature = $value["temperature"];
$labresult = $value["labresult"];
$waistline = $value["waistline"];
$weight = $value["weight"];
$BMI = $value["BMI"];
$findings = $value["findings"];
$diagnosis = $value["diagnosis"];
$plano = $value["plano"]; ...
if($num_rows == 0)
{
$sql->execute();
}
}
echo 'Table health from MS SQL DB and table health from MySQL DB are now synced!'."<br>";
echo "<a href='table_updater.php'>Go back to updater</a>";
Ошибка, которую он мне дает: «Неустранимая ошибка: ошибка Uncaught: вызов формата функции-члена () на null ", который в значительной степени говорит мне, что он не может использовать функцию форматирования для значений NULL, с которыми сталкивается.Однако, с помощью функции форматирования вместо этого она выдаст ошибку «Объект DateTime не может быть преобразован в строку».Есть ли способ для меня обойти это?Я не могу изменить значения базы данных, потому что она не моя.