webForumDet fria alternativet

Ta reda på felorsak i en class

PHP

4 svar · 334 visningar · startad av Peeer

Medlem sedan mars 20025 907 inlägg
Frågan#1

Hej!
Har en databasclass som jag använder på diverse sidor. Problemet är att jag vill ha ut vilken rad det var som genererade mysql-felet.

class Database
{
	//...
	function query($query) {
		$result = @mysql_query($query, $this->connection)
			or die(mysql_errno() ." - ". mysql_error());
		return $result;
	}
}
..

$db = new Database;
$db->query("select kolumn_som_inte_finns from tabell"); //Rad XX

I koden ovan skulle jag vilja få ut, förutom mysql-felmeddelandet, att felet är på rad XX i filen X.php.

Går det, och hur isf?

Medlem sedan mars 20007 896 inlägg
#2

Hm, kanske lite sent. Men jag vet inte om du har löst det eller inte, så jag ger ett svar här ändå. :)

Det finns en funktion som heter debug_backtrace() som du kan använda för det här. Den genererar och returnerar en associativ array med en massa nyttig information.

/* PHP-kod */
$errList = debug_backtrace();

Arrayen innehåller nu ett par element beroende på hur din kod ser ut. Kika på http://se.php.net/debug_backtrace för att se vilken information som kan finnas lagrad.

Det här kan hjälpa dig, jag vet inte - det är nog det närmaste du kommer åtminstone. :)

Medlem sedan mars 20025 907 inlägg
#3

Ja nästan. Om jag skriver ut hela arrayen som debug_backtrace() returnerar så fungerar det fint, men hur gör jag för att bara få med line ur den?

...
or die(mysql_errno() ." - ". mysql_error() . "Errline: " . debug_backtrace()["line"]);

Fungerar ju inte riktigt. Jag kan väl inte heller mellanlagra resultatet från funktionen i en array?

or {
$tmparr = debug_backtrace();
die(mysql_errno() ." - ". mysql_error() . "Errline: " . $tmparr["line"])
};

Så hur gör jag? :q

Medlem sedan mars 20007 896 inlägg
#4

Det andra exemplet fungerade inte eller?

Om inte kan du göra nåt fulhack;

$flag = false;
... or $flag = true;
if( $flag ) {
     echo mysql_errno();
     echo mysql_error();
     $errList = debug_backtrace();
     echo $errList[ 'line' ];
     die();
}
Medlem sedan mars 20025 907 inlägg
#5

Tack. Fick justera $errList[ 'line' ]; till $errList[0][ 'line' ];
Nu fungerar det :)

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