SQL Server, эквивалентный из MySQL ТЕПЕРЬ ()?

Примечание: попытка получить свойство ошибки, отличной от объекта

Случается, когда вы пытаетесь получить доступ к объекту объекта, пока нет объекта.

Типичный пример для non-object notice будет

$users = json_decode('[{"name": "hakre"}]');
echo $users->name; # Notice: Trying to get property of non-object

В этом случае $users представляет собой массив (а не объект), и он не имеет никаких свойств.

Это похоже для доступа к несуществующему индексу или ключу массива (см. Примечание: Undefined Index ).

Этот пример значительно упрощен. Чаще всего такое уведомление сигнализирует неконтролируемое возвращаемое значение, например. когда библиотека возвращает NULL, если объект не существует или просто неожиданное значение, отличное от объекта (например, в результате Xpath, структуры JSON с непредвиденным форматом, XML с неожиданным форматом и т. д.), но код не проверяет такой условие.

Поскольку эти не-объекты часто обрабатываются дальше, часто возникает фатальная ошибка при вызове метода объекта для не-объекта (см.: Неустранимая ошибка: вызов члену function ... на не-объекте ), останавливая скрипт.

Его можно легко предотвратить, проверив условия ошибки и / или переменную, соответствующую ожиданию. Здесь такое уведомление с примером DOMXPath:

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$divText = $result->item(0)->nodeValue; # Notice: Trying to get property of non-object

Проблема заключается в доступе к свойству nodeValue первого поля, пока он не был проверен, существует ли он или нет в $result коллекция. Вместо этого он платит, чтобы сделать код более явным, назначив переменные объектам, на которых работает код:

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$div     = $result->item(0);
$divText = "-/-";
if ($div) {
    $divText = $div->nodeValue;
}
echo $divText;

Связанные ошибки:

188
задан DMK 16 August 2013 в 04:29
поделиться

3 ответа

getdate() или getutcdate().

206
ответ дан Chuck Norris 23 November 2019 в 05:43
поделиться
getdate() 

прямой эквивалент, , но необходимо всегда использовать UTC datetimes

getutcdate()

, работает ли приложение через часовые пояса или не - иначе Вы рискуете завинчивать математику даты при переходах пружины/падения

71
ответ дан Steven A. Lowe 23 November 2019 в 05:43
поделиться

Можно также использовать CURRENT_TIMESTAMP, если Вы испытываете желание быть большим количеством совместимого ANSI (хотя, если Вы портируете код между поставщиками базы данных, это будет наименьшим количеством Ваших забот). Это - точно то же как GetDate() под покрытиями (см. этот вопрос для больше на этом).

нет никакого ANSI, эквивалентного для GetUTCDate(), однако, который является, вероятно, тем, который необходимо использовать, если приложение работает в больше, чем единственный часовой пояс...

24
ответ дан Community 23 November 2019 в 05:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: