Перепроверяемая привязка.NET

Предупреждение: mysql_fetch_array () ожидает, что параметр 1 является ресурсом, boolean given

Прежде всего:

Пожалуйста, не используйте mysql_* функции в новом коде . Они больше не поддерживаются и официально устарели . См. Красную рамку ? Узнайте о подготовленных операторах и используйте PDO или MySQLi - в этой статье , которые помогут вам решить, какой из них. Если вы выберете PDO, вот хороший учебник .


Это происходит, когда вы пытаетесь получить данные из результата mysql_query, но запрос

Это предупреждение и не остановит скрипт, но сделает вашу программу неправильной.

Вам нужно проверить результат, возвращенный mysql_query, на

$res = mysql_query($sql);
if (!$res) {
   die(mysql_error());
}
// after checking, do the fetch

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

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

Другие функции mysql*, которые также ожидают, что ресурс результата mysql в качестве параметра приведет к той же ошибке для такой же причина.

52
задан palacsint 6 July 2013 в 22:18
поделиться

4 ответа

Реализация Шаблона "одиночка" в C# говорит об этой проблеме в третьей версии.

Это говорит:

Создание энергозависимой переменной экземпляра может заставить его работать, как был бы явные вызовы барьера памяти, хотя в последнем случае даже эксперты не могут согласиться точно, какие барьеры требуются. Я склонен стараться избегать ситуаций, где эксперты не согласовывают то, что является правильным и что случилось!

автор, кажется, подразумевает, что двойная блокировка, менее вероятно, будет работать, чем другие стратегии и таким образом не должна использоваться.

25
ответ дан Ian Kemp 7 November 2019 в 09:08
поделиться

Перепроверка блокировки теперь работает в Java, а также C# (измененная модель памяти Java, и это - один из эффектов). Однако необходимо получить его точно право. Если Вы портите вещи даже немного, можно закончить тем, что теряли потокобезопасность.

, Поскольку другие ответы указали, если Вы реализуете шаблон "одиночка" , там намного лучшие способы сделать это. Лично, если я нахожусь в ситуации, где я должен выбрать между перепроверяемой блокировкой, и "блокируют каждый раз" код, я пошел бы для блокировки каждый раз, пока у меня не было вещественных доказательств, что это вызывало узкое место. Когда дело доходит до поточной обработки простой и очевидно корректный шаблон стоит много.

75
ответ дан Jon Skeet 7 November 2019 в 09:08
поделиться

Отметьте, чем в Java (и скорее всего в.Net также), перепроверяемая блокировка для одноэлементной инициализации является абсолютно ненужной, а также повреждается. Так как классы не инициализируются, пока они сначала не используются, желаемая ленивая инициализация уже достигается этим;

private static Singleton instance = new Singleton();

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

8
ответ дан Michael Borgwardt 7 November 2019 в 09:08
поделиться

.NET 4.0 имеет новый тип: Lazy, который устраняет любые опасения по поводу неправильного выбора шаблона. Он является частью новой параллельной библиотеки Task Parallel Library.

См. MSDN Parallel Computing Dev Center: http://msdn.microsoft.com/en-us/concurrency/default.aspx

BTW, для .NET 3.5 SP1 есть бэкпорт (я считаю, что он не поддерживается), доступный здесь.

25
ответ дан 7 November 2019 в 09:08
поделиться
Другие вопросы по тегам:

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