## JavaScript (ES6), 115 bytes

    a=>!a.some((b,i)=>b.some((q,j)=>q&&h[i]|v[j]|d[i+j]|e[i-j]|!(h[i]=v[j]=d[i+j]=e[i-j]=1))|!h[i],h=[],v=[],d=[],e=[])

Ungolfed:

    function queens(arr) {
        horiz = [];
        vert = [];
        diag = [];
        anti = [];
        for (i = 0; i < arr.length; i++) {
            for (j = 0; j < arr.length; j++) {
                if (arr[i][j]) { // if there is a queen...
                    if (horiz[i]) return false; // not already on the same row
                    if (vert[j]) return false; // or column
                    if (diag[i + j]) return false; // or diagonal
                    if (anti[i - j]) return false; // or antidiagonal
                    horiz[i] = vert[j] = diag[i + j] = anti[i - j] = true; // mark it
                }
            }
            if (!horiz[i]) return false; // fail if no queen in this row
        }
        return true;
    }