Прежде всего:
Пожалуйста, не используйте
mysql_*
функции в новом коде . Они больше не поддерживаются и официально устарели . См. Красную рамку ? Узнайте о подготовленных операторах и используйте PDO или MySQLi - в этой статье , которые помогут вам решить, какой из них. Если вы выберете PDO, вот хороший учебник .Это происходит, когда вы пытаетесь получить данные из результата
mysql_query
, но запросЭто предупреждение и не остановит скрипт, но сделает вашу программу неправильной.
Вам нужно проверить результат, возвращенный
mysql_query
, на$res = mysql_query($sql); if (!$res) { die(mysql_error()); } // after checking, do the fetch
Вопросы, относящиеся
- mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, логическим значением в select
- Все «mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, boolean задан« Вопросы по Stackoverflow
Связанные ошибки:
Другие функции
mysql*
, которые также ожидают, что ресурс результата mysql в качестве параметра приведет к той же ошибке для такой же причина.
Реализация Шаблона "одиночка" в C# говорит об этой проблеме в третьей версии.
Это говорит:
Создание энергозависимой переменной экземпляра может заставить его работать, как был бы явные вызовы барьера памяти, хотя в последнем случае даже эксперты не могут согласиться точно, какие барьеры требуются. Я склонен стараться избегать ситуаций, где эксперты не согласовывают то, что является правильным и что случилось!
автор, кажется, подразумевает, что двойная блокировка, менее вероятно, будет работать, чем другие стратегии и таким образом не должна использоваться.
Перепроверка блокировки теперь работает в Java, а также C# (измененная модель памяти Java, и это - один из эффектов). Однако необходимо получить его точно право. Если Вы портите вещи даже немного, можно закончить тем, что теряли потокобезопасность.
, Поскольку другие ответы указали, если Вы реализуете шаблон "одиночка" , там намного лучшие способы сделать это. Лично, если я нахожусь в ситуации, где я должен выбрать между перепроверяемой блокировкой, и "блокируют каждый раз" код, я пошел бы для блокировки каждый раз, пока у меня не было вещественных доказательств, что это вызывало узкое место. Когда дело доходит до поточной обработки простой и очевидно корректный шаблон стоит много.
Отметьте, чем в Java (и скорее всего в.Net также), перепроверяемая блокировка для одноэлементной инициализации является абсолютно ненужной, а также повреждается. Так как классы не инициализируются, пока они сначала не используются, желаемая ленивая инициализация уже достигается этим;
private static Singleton instance = new Singleton();
, Если Ваш Singleton-класс не содержит материал как константы, к которым можно получить доступ, прежде чем экземпляр Singleton сначала используется, это - все, что необходимо сделать.
.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 есть бэкпорт (я считаю, что он не поддерживается), доступный здесь.