Прежде всего:
Пожалуйста, не используйте
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 в качестве параметра приведет к той же ошибке для такой же причина.
Это могло бы представлять интерес:
function isElement(obj) {
try {
//Using W3 DOM2 (works for FF, Opera and Chrome)
return obj instanceof HTMLElement;
}
catch(e){
//Browsers not supporting W3 DOM2 don't have HTMLElement and
//an exception is thrown and we end up here. Testing some
//properties that all elements have (works on IE7)
return (typeof obj==="object") &&
(obj.nodeType===1) && (typeof obj.style === "object") &&
(typeof obj.ownerDocument ==="object");
}
}
Это - часть DOM, Level2.
Обновление 2 : Это - то, как я реализовал его в своей собственной библиотеке: (предыдущий код не работал в Chrome, потому что Узел и HTMLElement являются функциями вместо ожидаемого объекта. Этот код тестируется в FF3, IE7, Chrome 1 и Opera 9).
//Returns true if it is a DOM node
function isNode(o){
return (
typeof Node === "object" ? o instanceof Node :
o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName==="string"
);
}
//Returns true if it is a DOM element
function isElement(o){
return (
typeof HTMLElement === "object" ? o instanceof HTMLElement : //DOM2
o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName==="string"
);
}
Я думаю, что то, что необходимо сделать, осуществляют полную проверку некоторых свойств, которые всегда будут в dom элементе, но их комбинация не будет наиболее вероятный быть в другом объекте, как так:
var isDom = function (inp) {
return inp && inp.tagName && inp.nodeName && inp.ownerDocument && inp.removeAttribute;
};
Это из прекрасной библиотеки JavaScript MooTools:
if (obj.nodeName){
switch (obj.nodeType){
case 1: return 'element';
case 3: return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace';
}
}
В Firefox можно использовать instanceof Node
. То, что Node
определяется в DOM1.
, Но это не настолько легко в IE.
можно только удостовериться, что это - элемент DOM при помощи функции DOM и выгоды если любое исключение. Однако это может иметь побочный эффект (например, изменить объектное внутреннее состояние/performance/memory утечка)
Вы могли попытаться добавить его к реальному узлу DOM...
function isDom(obj)
{
var elm = document.createElement('div');
try
{
elm.appendChild(obj);
}
catch (e)
{
return false;
}
return true;
}
Все решения выше и ниже (мое решение включая) страдают от возможности того, чтобы быть неправильным, особенно на IE — это довольно возможно к (ре), определяют некоторые объекты/методы/свойства подражать узлу DOM, представляющему недопустимый тест.
Так обычно я использую тестирование утиного стиля ввода: Я тестирую специально для вещей, которые я использую. Например, если я хочу клонировать узел, я тестирую его как это:
if(typeof node == "object" && "nodeType" in node &&
node.nodeType === 1 && node.cloneNode){
// most probably this is a DOM node, we can clone it safely
clonedNode = node.cloneNode(false);
}
В основном это - немного проверки работоспособности + прямой тест для метода (или свойство), я планирую использовать.
Случайно тест выше является хорошим тестом для узлов DOM на всех браузерах. Но если Вы хотите быть на безопасной стороне, всегда проверяют присутствие методов и свойств и проверяют их типы.
РЕДАКТИРОВАНИЕ: IE использует объекты ActiveX представить узлы, таким образом, их свойства не ведут себя как истинный объект JavaScript, например:
console.log(typeof node.cloneNode); // object
console.log(node.cloneNode instanceof Function); // false
, в то время как это должно возвратить "функцию" и true
соответственно. Единственный путь к методам тестирования состоит в том, чтобы видеть если определенного.