check of een waarde voorkomt in een mysqli result

Status
Niet open voor verdere reacties.

manueld

Gebruiker
Lid geworden
12 feb 2012
Berichten
216
ik heb een 1 koloms recordset vanuit mijn db met numerieke waarden welke ik via mysqli opvraag. ik heb gecontroleerd en $result bevat inderdaad de waarden.

($result = $mysqli->query($sql); )

nu wil ik checken of de waarde "1" in $result voorkomt. heel basaal

if (in_array('1', $result )) {
echo "Found";
}
else

{echo "Not Found";}

Toch krijg ik altijd "Not found" de check lijkt dan ook niet goed. $result bevat de waarden 1 en 2 dus op deze twee zou hij true moeten geven en op bv 3 false.

wat doe ik fout?
 
De inhoud van $result is afhankelijk van het select statement in $sql.
Het is handig de inhoud van $sql te weten.
 
En zo?
PHP:
if (in_array(1, $result, TRUE))
 
$mysqli = new mysqli($host, $user, $pass, $db);
$sql = ".....";
$result = $mysqli->query($sql);
$results is een collectie records. In werkelijkheid is $results een iterator-object (geen array). Elke keer als je fetch_assoc() gebruikt om een record als array uit te lezen gaat de iterator naar het volgende record totdat het laatste record is bereikt. Gebruik een goede sql query dan hoef je in php geen fratsen uit te halen :)
Code:
$sql = 'SELECT * FROM tabelnaam WHERE veldnaam=1';
$result = $mysqli->query($sql);
$gevonden = false;
if ($result->num_rows > 0) {
    $gevonden = true;
}

Wil je het perse met php doen
Code:
$sql = 'SELECT * FROM tabelnaam';
$result = $mysqli->query($sql);
$gevonden = false;
if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        if ($row["veldnaam"] == 1) {
            $gevonden = true;
        }
    }
}
 
Laatst bewerkt:
Je kunt ook altijd nog een COUNT gebruiken in je query, hoef je alleen het resultaat maar te verwerken.

[SQL]
SELECT
COUNT(id)
FROM
table
WHERE
field = "value"[/SQL]
 
SELECT COUNT(id) FROM TABLE WHERE FIELD = "value"
Alsnog heb je $result->num_rows nodig om uit te zoeken of er 0 of 1 records zijn geteld in $result (de collectie records).
Mee eens dat SELECT COUNT(..) de voorkeur heeft boven SELECT * omdat er minder geheugen wordt gebruikt maar dat is marginaal.
 
Laatst bewerkt:
iedereen bedankt. hier zit vast een werkende oplossing tussen. ik ga hier in het weekend mee aan de slag.

even wat achtergrond

het resultaat van de query bepaald welke pagina's door de gebruiker geopend mogen worden en er dus een hyperlink in de pagina geplaatst moet worden. dus als hij een 1 in $result heeft mag pagina 1 geopend worden en zo hetzelfde voor alle pagina's

ik wil eenmalig de query laten draaien en vervolgens meerdere checks in php gaan doen. anders zou ik voor elke check weer de db moeten aanspreken en dat lijkt mij minder wenselijk

iets zoals dit

draai query

als in result een 1 staat zet dan een link op de pagina naar pagina 1
als in result een 2 staat zet dan een link op de pagina naar pagina 2
etc

op deze manier kan ik afhankelijk van de login bepalen of links wel of niet beschikbaar mogen zijn. ( en ja ik heb ook een check aan het begin van elke pagina of de persoon de huidige pagina mag starten)
 
ik wil eenmalig de query laten draaien en vervolgens meerdere checks in php gaan doen
Dan wordt het een * (onderste script in #4) en het resultaat in php verwerken
Code:
$sql = 'SELECT * FROM tabelnaam';
$result = $mysqli->query($sql);
....
 
Laatst bewerkt:
het is gelukt. misschien niet de beste methode maar het werkt wel goed. de sql heeft uiteraard iets meer omhands waaronder een where clause met de gebruikersnaam. de query geeft een lange lijst met ID's welke overeen komen met pagina's. Vervolgens kan ik nu voor elke pagina of link naar een pagina via " IF ($paginaX) {plaats de link of voer pagina uit}" controleren of er toegangsrechten zijn. waarbij de X het pagina ID is. iedereen bedankt.

Code:
 $sql = "SELECT `PaginaID` FROM `PaginaRechten`" ;
 
 $result = $mysqli->query($sql);
if ($result->num_rows > 0) {

    while ($row = $result->fetch_assoc()) {
       
        for ($x = 0; $x <= 100; $x++) {
           
          if ($row["PaginaID"] == $x) {
            ${"pagina" . $x} = true;
   
        }
}

    }
}
 
Telkens een for loop doorlopen is niet effecient. De rest van de code ken ik niet maar dit lijkt hetzelfde
Code:
$sql = "SELECT `PaginaID` FROM `PaginaRechten`";
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        ${"pagina" . $row["PaginaID"]} = true;
    }
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan