|
| MySQL, PHP indsæt og hent fra DB - simpelt~ Fra : peo |
Dato : 22-07-02 05:44 |
|
Hej allesammen!
Newbee her med et sikkert simpelt problem:
jeg forsøger følgende; opret tabel, indsæt i denne tabel, hent fra tabellen:
---------------------------------------------------------
// 1. laver en ny tabel der hedder Nyheder
$tabelSQL = "create Table Nyheder
(
id int(5) default NULL auto_increment,
dato int(30),
overskrift varchar(50),
nyhed varchar(5000)
)";
mysql_query($tabelSQL);
---------------------------------------------------------
// 2. indsætter noget i tabellen Nyheder
$dato = time();
$overskrift = "Nyhedens overskrift";
$nyhed = "Lorem ipsum";
$insertSQL = "insert into Nyheder (dato, overskrift, nyhed)
values ($dato, '$overskrift', '$nyhed')";
mysql_query($insertSQL);
---------------------------------------------------------
// 3. henter alt fra tabellen Nyheder
$res = mysql_query("SELECT * FROM Nyheder");
while($row = mysql_fetch_array($res)) {
// udskriv hver 'overskrift' og et break
echo $row['overskrift']."<br>";
}
---------------------------------------------------------
Dette skulle være meget simpelt, men jeg får følgende fejl:
"Supplied argument is not a valid MySQL result resource"
De tre stumper kode ligger ikke på samme PHP-side, men på hver sin.
Kan nogen sætte mig på rette kurs?
På forhånd tak for hjælpen!
Peo
PS: som i kan se opretter jeg i tabellen Nyheder en kolonne ved navn id med
automatisk numerering. Er det korrekt formodet at for hver gang jeg
indsætter noget i tabellen, så dannes dette id-nummer automatiskt, uden at
jeg børe gøre noget i 'insert'-koden?
| |
Peter Brodersen (22-07-2002)
| Kommentar Fra : Peter Brodersen |
Dato : 22-07-02 06:13 |
|
On Mon, 22 Jul 2002 06:43:40 +0200, "peo" <mich@peo.dk> wrote:
>// 1. laver en ny tabel der hedder Nyheder
>$tabelSQL = "create Table Nyheder
> (
> id int(5) default NULL auto_increment,
> dato int(30),
> overskrift varchar(50),
> nyhed varchar(5000)
> )";
>mysql_query($tabelSQL);
Først og fremmest bør du have noget fejlhåndtering på, når du kører en
query. Den hurtige og simple:
mysql_query($tabelSQL) OR die("Query:$tabelSQL\nFejl:".mysql_error());
Det kan hjælpe dig med de præcise fejlmeddelelser undervejs.
Hvad angår oprettelsen:
1. Et varchar-felt (nyhed) må max være 255 tegn i MySQL. Brug text i
stedet for - altså "nyhed text" i stedet for "nyhed varchar(5000)".
2. Derudover skal dit id også være key, fx:
id int(5) default NULL auto_increment primary key
>---------------------------------------------------------
>// 2. indsætter noget i tabellen Nyheder
>$dato = time();
>$overskrift = "Nyhedens overskrift";
>$nyhed = "Lorem ipsum";
>$insertSQL = "insert into Nyheder (dato, overskrift, nyhed)
> values ($dato, '$overskrift', '$nyhed')";
>mysql_query($insertSQL);
Fint nok - mysql har i øvrigt selv nogle time-funktioner. Hvis du
insisterer på at lade "dato" være et integer-felt, kan du i
ovenstående dog stadigvæk erstatte $dato med UNIX_TIMESTAMP(NOW())
inde i query'en.
>---------------------------------------------------------
>// 3. henter alt fra tabellen Nyheder
>$res = mysql_query("SELECT * FROM Nyheder");
>while($row = mysql_fetch_array($res)) {
>// udskriv hver 'overskrift' og et break
>echo $row['overskrift']."<br>";
>}
Det burde også være fint nok. Men ellers kan det anbefales at tjekke
om query'en overhovedet går godt, som nævnt i starten af dette indlæg.
>Dette skulle være meget simpelt, men jeg får følgende fejl:
>"Supplied argument is not a valid MySQL result resource"
Lige præcis denne fejl kommer ved at fx $res ikke bliver tildelt noget
database-handle (fordi query'en fejler). Efterfølgende prøver du så at
bruge $res (der altså ikke indeholder noget), og så vil
mysql_fetch_array() fejle, fordi den ikke kan bruge $res til noget.
>PS: som i kan se opretter jeg i tabellen Nyheder en kolonne ved navn id med
>automatisk numerering. Er det korrekt formodet at for hver gang jeg
>indsætter noget i tabellen, så dannes dette id-nummer automatiskt, uden at
>jeg børe gøre noget i 'insert'-koden?
Korrekt, det bliver det næste id. Hvis du af en eller anden grund vil,
så kan du godt medtage id i din INSERT-query. Så skal du blot indsætte
NULL for id; den vil så blot blive næste nummer - præcis som hvis du
udelader den.
--
- Peter Brodersen
| |
peo (22-07-2002)
| Kommentar Fra : peo |
Dato : 22-07-02 06:50 |
|
Hvor er det lækkert at jeg ikke er den eneste der er "sent oppe".
Tak for fyldige svar Peter, jeg kigger nærmere på sagerne efter den første
kope kaffe.
Igen - Tak for hurtig responce, også selvom det gælder nybegynderspg. der
sikker er blevet besvaret hundrede af gange før. Hvis jeg kan gengælde
(?flash) må du endeligt sige til...
mvh. Peo
www.peo.dk
| |
peo (22-07-2002)
| Kommentar Fra : peo |
Dato : 22-07-02 06:57 |
|
For fanden... Hej Peter!
Jeg kunne sku ikke lige huske dig, men det var da dig der var på besøge hos
Bandage, den aften hvor vi hold flash-kom-hygge var det ikke?
...og så et lille spg. mere.
> 1. Et varchar-felt (nyhed) må max være 255 tegn i MySQL. Brug text i
> stedet for - altså "nyhed text" i stedet for "nyhed varchar(5000)".
Har ledt efter en eller anden oversigt over disse "datatyper", hvad de
kan/må indeholde, hvornår det er smart at bruge en frem for en anden osv.
Har du/nogen et godt link?
/peo
| |
Peter Brodersen (22-07-2002)
| Kommentar Fra : Peter Brodersen |
Dato : 22-07-02 07:20 |
|
On Mon, 22 Jul 2002 07:56:39 +0200, "peo" <mich@peo.dk> wrote:
>Jeg kunne sku ikke lige huske dig, men det var da dig der var på besøge hos
>Bandage, den aften hvor vi hold flash-kom-hygge var det ikke?
Joda!
>> 1. Et varchar-felt (nyhed) må max være 255 tegn i MySQL. Brug text i
>> stedet for - altså "nyhed text" i stedet for "nyhed varchar(5000)".
>Har ledt efter en eller anden oversigt over disse "datatyper", hvad de
>kan/må indeholde, hvornår det er smart at bruge en frem for en anden osv.
>Har du/nogen et godt link?
http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#Column_types
må være det link, du lige står og mangler.
--
- Peter Brodersen
| |
Søren Lund Jensen (25-07-2002)
| Kommentar Fra : Søren Lund Jensen |
Dato : 25-07-02 15:04 |
|
On Mon, 22 Jul 2002 07:56:39 +0200, "peo" <mich@peo.dk> wrote:
>Har ledt efter en eller anden oversigt over disse "datatyper", hvad de
>kan/må indeholde, hvornår det er smart at bruge en frem for en anden osv.
>Har du/nogen et godt link?
¨
En tommelfingerregel er at holde felterne så små som muligt, dog med
en vis portion fremsynethed, da det ikke er det nemmeste at ændre på
dem, når først databasen er taget i brug.
Med venlig hilsen,
Søren Lund Jensen
| |
peo (22-07-2002)
| Kommentar Fra : peo |
Dato : 22-07-02 05:47 |
|
Jeg får fejlmeddelelsen når jeg forsøger at hente fra databasen - pkt. 3.
Peo
| |
Peter Brodersen (22-07-2002)
| Kommentar Fra : Peter Brodersen |
Dato : 22-07-02 06:18 |
|
On Mon, 22 Jul 2002 06:46:38 +0200, "peo" <mich@peo.dk> wrote:
>Jeg får fejlmeddelelsen når jeg forsøger at hente fra databasen - pkt. 3.
mysql_error() vil returnere fejlen. En variant af
$res = mysql_query("...") OR die(...);
er fx blot:
<?php
$res = mysql_query("...");
if (!$res) { // hvis $res ikke er tildelt nogen ressource-værdi
print "Der skete en frygtelig fatal fejl!<br>";
print "Fejlen er: ".mysql_error()."<br>";
print "Og nu afslutter jeg. Ses!";
exit;
}
// og hertil når vi kun, hvis vores query er gået godt:
while ($row = mysql_fetch_array($res) ) {
...
}
?>
Bemærk i øvrigt: Blot fordi en query ikke returnerer nogen rækker (fx
"hent alle nyheder, der er ældre end 100 år"), vil den stadigvæk være
succesfuld, og altså heldigvis ikke fejle i ovenstående.
--
- Peter Brodersen
| |
|
|