Уникальным ключом SQL-сервера является также Индекс?

Неустранимая ошибка: вызов функции-члена ... на не-объект

происходит с кодом, подобным xyz->method(), где xyz не является объектом и, следовательно, method не может

Это фатальная ошибка, которая остановит сценарий (уведомление о прямой совместимости: это станет захватывающей ошибкой, начиная с PHP 7).

Чаще всего это знак что в коде отсутствуют проверки условий ошибок. Убедитесь, что объект фактически является объектом перед вызовом его методов.

Пример типичного будет

// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);

В приведенном выше примере запрос не может и prepare() назначит false на $statement. Попытка вызвать метод execute() приведет к Fatal Error, потому что false является «не объектом», потому что значение является логическим.

Выясните , почему ваша функция вернула логическое значение вместо объекта. Например, проверьте объект $pdo для последней произошедшей ошибки. Подробности о том, как отлаживать это, будут зависеть от того, как обрабатываются ошибки для конкретной рассматриваемой функции / объекта / класса.

Если даже сбой ->prepare не выполняется, то ваш дескриптор

// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);

базы данных

// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);

не попал в текущий объем . Найдите, где он определился. Затем передайте его как параметр, сохраните его как свойство или поделите его через глобальную область.

Другой проблемой может быть условное создание объекта, а затем попытка вызова метода вне этого условного блока. Например,

if ($someCondition) {
    $myObj = new MyObj();
}
// ...
$myObj->someMethod();

Пытаясь выполнить метод вне условного блока, ваш объект не может быть определен.

Вопросы, относящиеся:

51
задан casperOne 22 January 2011 в 10:44
поделиться

3 ответа

Уникальный ключ: Уникальный ключ осуществляет уникальность столбца, на котором они определяются. Уникальный ключ создает некластерный индекс на столбце. Уникальный ключ позволяет только одно Нулевое значение.

изменяют таблицу для добавления ограничения на уникальность данных к столбцу:

ОГРАНИЧЕНИЕ ADD Авторов ALTER TABLE IX_Authors_Name, УНИКАЛЬНЫЕ (Имя), ИДУТ

Источник

[еще 118] информация от MSDN.

FWIW - если бы Ваше ограничение не создает индекс, я постарался бы не называть его IX_, поскольку это, как обычно предполагалось бы, было бы связано с одним (IX = Индекс).

39
ответ дан tvanfosson 7 November 2019 в 10:20
поделиться

В основном, в SQL Server, ограничение на уникальность данных действительно осознано посредством уникального индекса.

различия между ограничением UNIQUE и УНИКАЛЬНЫМ ИНДЕКСОМ являются довольно тонкими, действительно. При создании УНИКАЛЬНОГО ИНДЕКСА можно сослаться на это во внешнем ключе ограничения от другой таблицы (не работает, если Вы создаете ограничение UNIQUE....).

Поэтому, каково различие? Хорошо - ограничение на уникальность данных действительно является большим количеством логической вещи на таблице - Вы хотите выразить намерение, что содержание данного столбца (или группа столбцов) уникально.

уникальный индекс А (как большинство индексов) является большим количеством "закулисной" детали реализации.

С моей точки зрения, если у Вас действительно нет проблемы с ним, я всегда использовал бы УНИКАЛЬНЫЙ ИНДЕКС - преимущество того, чтобы быть частью ограничения ссылочной целостности довольно допустимо и может быть очень полезным в определенных случаях. Функционально, на практике, нет никакого различия между использованием Ограничения на уникальность данных по сравнению с Уникальным индексом, действительно.

20
ответ дан Benjamin 7 November 2019 в 10:20
поделиться

Уникальный ключ является индексом в, я подозреваю почти каждый продукт базы данных. Это должно быть, иначе базе данных было бы нелегко осуществлять его: при вставке значения база данных должна ответить, "который оценивает, уже существуют?" Нормальный способ сделать, который является, консультируется с индексом.

у меня нет SQL Server передо мной для тестирования, но я был бы потрясен, если бы он не сделал.

1
ответ дан derobert 7 November 2019 в 10:20
поделиться
Другие вопросы по тегам:

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