webForumDet fria alternativet

Får ej ut något på till synes självklar SQL-fråga

PHP

8 svar · 793 visningar · startad av prplxr

Medlem sedan juni 2012581 inlägg
Frågan#1

Suck, nu har man kört fast igen. Det är säkert något jag råkat missa, men jag behöver ett par extra ögon för att hitta det.

Kod:

	$keywordsFound = FALSE;
	
	$sql2 = "SELECT * FROM tblkeywords WHERE cid = $id";
	$query2 = $conn -> Prepare($sql2);
	$query2 -> Execute();
	$row2 = $query2 -> Fetch();
	
	if($query2 -> RowCount() > 0) {
		$keywordsFound = TRUE;
		$key1 = $row2['key1'];
		$key2 = $row2['key2'];
		$key3 = $row2['key3'];
		$key4 = $row2['key4'];
		$key5 = $row2['key5'];
	};

Önskat resultat är att $keywordsFound blir TRUE och att värde hämtas ur tabellen till variablerna enligt koden ovan. Detta sker inte. Väljer jag att kommentera bort allt som har med $keywordsFound och RowCount() att göra så får jag ändå inte något värde i variablerna.

Har kört SQL-frågan för sig i HeidiSQL och där får jag ut rätt värden.
$id har förväntat värde.

Vad missar jag? :S

Medlem sedan mars 2006296 inlägg
#2

Hej!
Vad använder du för databas klass, är det någon form av mysqli wrapper?

Medlem sedan aug. 20039 340 inlägg
#3

prepare, execute, fetch och rowCount ska väl börja med liten bokstav?

Medlem sedan juni 2012581 inlägg
#4

Nate.A skrev:

Hej!
Vad använder du för databas klass, är det någon form av mysqli wrapper?

Det är PDO. Nej, det är ingen mysqli wrapper.

nitro2k01 skrev:

prepare, execute, fetch och rowCount ska väl börja med liten bokstav?

Det har ingen betydelse i PHP. Anledningen till att jag gör så är för att jag helt sonika tycker det ser snyggare ut.

Medlem sedan juni 200032 967 inlägg
#5

Du är säker på att $id innehåller det du tror?

för övrigt borde väl raden

$row2 = $query2 -> Fetch();

ligga inne i if-satsen?

Medlem sedan juni 2012581 inlägg
#6

@nders skrev:

Du är säker på att $id innehåller det du tror?

Yes. 100% säker. Har skrivit ut både $id och $sql2 och de innehåller precis det jag förväntat mig.

@nders skrev:

för övrigt borde väl raden

$row2 = $query2 -> Fetch();

ligga inne i if-satsen?

Det har egentligen ingen betydelse. Även om man bara får tillbaka ett tomt recordset så kommer den aldrig försöka nå några värden som inte existerar.

Men för att vara på den säkra sidan har jag givetvis testat, med samma resultat oavsett.

Medlem sedan aug. 20039 340 inlägg
#7

prplxr skrev:

Det har ingen betydelse i PHP. Anledningen till att jag gör så är för att jag helt sonika tycker det ser snyggare ut.

Tydligen är det så. Då har jag lärt mig något nytt idag. Men urk, så ska inte ett språk vara konstruerat. (Dvs att variabler är skiftlägeskänsliga medan funktionsnamn inte är det.) Jag anser personligen att stor begynnelsebokstav ska vara reserverat för klassnamn i objektbaserade språk. Men smaken är som baken, alla andras luktar illa.

Vad sägs om lite felhantering?

    $keywordsFound = FALSE; 
     
    $sql2 = "SELECT * FROM tblkeywords WHERE cid = $id"; 
    $query2 = $conn -> Prepare($sql2); 
    if(!$query2){
        echo "Error in prepare!";
        print_r($conn->errorInfo());
    }
    $executeSuccess = $query2 -> Execute(); 
    if(!$executeSuccess){
        echo "Error in execute!";
        print_r($query2->errorInfo());
    }

    $row2 = $query2 -> Fetch(); 
    if(!$row2){
        echo "Error in fetch!";
        print_r($query2->errorInfo());
    }
     
    if($query2 -> RowCount() > 0) { 
        $keywordsFound = TRUE; 
        $key1 = $row2['key1']; 
        $key2 = $row2['key2']; 
        $key3 = $row2['key3']; 
        $key4 = $row2['key4']; 
        $key5 = $row2['key5']; 
    };
Medlem sedan juni 2012581 inlägg
#8

Nu börjar vi komma någon vart!

Cannot execute queries while other unbuffered queries are active.  Consider using PDOStatement::fetchAll().  Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

Ska klura vidare på detta och se vilken lösning som blir smidigast. Tack för tipset!

Medlem sedan juni 2012581 inlägg
#9

Har löst det nu! Hade två frågor i "samma fråga" längre upp i koden och den andra hade inte körts. Såg till att den kördes först och sedan fungerade det finfint!

259 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)