varför funkar inte detta?
show_unike_hits_on_date($date);
function show_unike_hits_on_date($date){
$date2 = $date. "%";
$query = 'SELECT count( DISTINCT IP ) '
. ' FROM `hms` '
. ' WHERE `time` '
. ' LIKE "$date2"';
$result = mysql_query($query) or die("Query failed : " . mysql_error());
$row = mysql_fetch_array($result, MYSQL_NUM);
$answer = $row[0];
echo $answer;
};
svaret som ekas blir 0 men om jag byter ut variabeln i sql satsen mot datumsträngen (hårdkodar den) så returneras rätt svar från mySQL..
Har testat att explicit casta datumet, men det gör ingen skillnad..
tacksam för svar
lunne82Medlem sedan dec. 2003153 inlägg Prova skriva ut $query så ser du ju vad som skickas till databasen å så kan du fixa det som behövs. Har du rätt förmat på $date?
kjellMedlem sedan dec. 1999757 inlägg . ' LIKE "$date2"'
skickar förmodligen inget annat än just $date2 eftersom variabler inte körs mellan enkelfnuttar.
aasahMedlem sedan mars 20034 471 inlägg Re: ny liten php-mysql fråga
Strängar i SQL står inom ' ' (enkelfnuttar) tabeller och kolumner ska inte ha några fnuttar. Så skriv frågan som:
$query = "SELECT count( DISTINCT IP ) FROM hms
WHERE time LIKE '$date2' ";
istället.
Du kan radbryta mitt i en sträng i PHP. PHP bryr sig inte, och det gör inte SQL heller...
Kjells påpekande är riktigt, men det fungerar utmärkt här om man skriver som jag gjorde. För inom en sträng avgränsad med " (dubbelfnuttar) är enkelfnutten vilket tecken som helst enligt PHP. Alltså kommer $date2 att evalueras eftersom den står inom dubbelfnuttar och inte enkel-diton (enligt PHP). Det som databasen tar emot, å andra sidan, är:
SELECT count( DISTINCT IP ) FROM hms
WHERE time LIKE '$date2'
Och då har datumet fått sin strängmarkering.
red: Förtydligande
kjellMedlem sedan dec. 1999757 inlägg Det är riktigt. Ett litet förtydligande är att det inte fanns enkelfnuttar runt tabellnamn eller kolumner, utan hade skrivet precis som ditt exempel, fast tvärtom, alltså
$query = 'SELECT count( DISTINCT IP ) FROM hms
WHERE time LIKE "$date2"';
Av den anledningen parsas alltså inte variablen $date2 av PHP.
För att förenkla koden något så kunde man skippa
$query = 'SELECT count( DISTINCT IP ) '
. ' FROM `hms` '
. ' WHERE `time` '
. ' LIKE "$date2"';
$result = mysql_query($query) or die("Query failed : " . mysql_error());
och skriva
$result = mysql_query("SELECT count( DISTINCT IP ) FROM hms WHERE time LIKE '$date2' ");
istället.
aasahMedlem sedan mars 20034 471 inlägg
kjell skrev:
Det är riktigt. Ett litet förtydligande är att det inte fanns enkelfnuttar runt tabellnamn eller kolumner, ...
Nähä? :q Vad är det då för extra-fnuttar som finns runt namnen i det ursprungliga inlägget OCH ditt citat av detsamma? Någon sorts underlig fnutt är där i alla fall...
@ndersMedlem sedan juni 200032 969 inlägg
Vad är det då för extra-fnuttar som finns runt namnen i det ursprungliga inlägget OCH ditt citat av detsamma?
Det är s.k. "back-ticks", som man kan omge fältnamn med, exempelvis om man använder reserverade ord som tabell- eller fältnamn. (motsvaras i ex. Access av hakparenteser, [].)
Det är onödigt, imho, att använda back-ticks runt objektsnamn i SQL.
Mvh
kjellMedlem sedan dec. 1999757 inlägg Det är s.k. back-ticks men dessa behövs inte i sammanhanget. Man använder back-ticks när man exempelvis har reserverade ord som tabell- och kolumnnamn.
Det kanske ser ut som enkelfnuttar i inlägget beroende på vilken webbläsare, textstorlek m.m. som man använder.
[r]
Alltid någon som hinner posta innan man hinner skriva klart :)