WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   MySQL: Problem mit CASE (http://www.wcm.at/forum/showthread.php?t=219820)

Potassium 18.07.2007 23:50

MySQL: Problem mit CASE
 
PHP-Code:

SELECT CASE WHEN INSTR('".strtolower($_SERVER["HTTP_USER_AGENT"])."'LOWER(`Agent_String`)) > 0  THEN 1 ELSE 0 END FROM ".TABLE_COUNTER_BLOCKED_AGENT." LIMIT 1 

Nun gibt er mir aber immer zurück:

print_r($row) gibt nun zurück:
Code:

[CASE WHEN INSTR('mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; de)', LOWER(`Agent_String`)) > 0 THEN 1 ELSE 0 END] => 0
Anstatt einfach 1 oder 0.
Warum?
MySQL: Version 4.0.24

void 19.07.2007 20:44

Re: MySQL: Problem mit CASE
 
Zitat:

Original geschrieben von Potassium
Code:

[CASE WHEN INSTR('mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; de)', LOWER(`Agent_String`)) > 0 THEN 1 ELSE 0 END] => 0

passt doch eh, oder? hast ja eh am ende deine "0"!

Potassium 19.07.2007 20:58

Re: Re: MySQL: Problem mit CASE
 
Zitat:

Original geschrieben von void
passt doch eh, oder? hast ja eh am ende deine "0"!
ich will aber dass er einfach nur 0 oder NULL zurückgibt, oder am besten gar keine row.
So dass ich mit mysql_num_rows() abfragen kann ob er was findet...

void 19.07.2007 21:53

was ich meine: print_r() gibt doch alles formatiert aus - das kann ja keiner wissen, wie du deine $row befüllst -> also tippe ich einmal auf $row[0] bzw. $row["CASE WHEN INSTR('mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; de)', LOWER(`Agent_String`)) > 0 THEN 1 ELSE 0 END"]
Zitat:

Original geschrieben von Potassium
PHP-Code:

SELECT CASE WHEN INSTR('".strtolower($_SERVER["HTTP_USER_AGENT"])."'LOWER(`Agent_String`)) > 0  THEN 1 ELSE 0 END FROM ".TABLE_COUNTER_BLOCKED_AGENT." LIMIT 1 


oder:
PHP-Code:

SELECT CASE WHEN INSTR('".strtolower($_SERVER["HTTP_USER_AGENT"])."'LOWER(`Agent_String`)) > 0  THEN 1 ELSE 0 END AS 'is_mozilla' FROM ".TABLE_COUNTER_BLOCKED_AGENT." LIMIT 1 

und dann $row[0] bzw. $row['is_mozilla']

Potassium 19.07.2007 22:23

PHP-Code:

$row mysql_fetch_assoc($query); 

Am liebsten wäre mir mysql_num_rows($query) würde wenn der Browser NICHT matched 0 gibt und ansonsten halt ein Ergebnis. Geht das?

void 21.07.2007 13:21

letzter tipp
 
PHP-Code:

$row=mysql_fetch_array($query);
$browser_match=$row[0];
print_r($browser_match); //0 oder 1 


Potassium 26.07.2007 20:30

Ich hab es nun so gelöst und es funktioniert:
PHP-Code:

SELECT CASE WHEN (INSTR('".strtolower($_SERVER["HTTP_USER_AGENT"])."'LOWER(`Agent_String`)) > 0)  
THEN 1 ELSE 0 END AS Matched 
FROM 
".TABLE_COUNTER_BLOCKED_AGENT." 
WHERE INSTR('".strtolower($_SERVER["HTTP_USER_AGENT"])."'LOWER(`Agent_String`)) LIMIT 1 

Beim vorigen hat er nämlich nach der ersten Row in der Blocktable aufgehört zu suchen und gesagt: Matched nicht uns aus!

void 26.07.2007 22:51

dann kannst gleich
Code:

SELECT '1' FROM ".TABLE_COUNTER_BLOCKED_AGENT." WHERE INSTR( '".strtolower($_SERVER["HTTP_USER_AGENT"])."', LOWER( `Agent_String` ) )
LIMIT 1

nehmen


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag