webForumDet fria alternativet

Fnuttar i SQL

PHPur PHP

3 svar · 404 visningar · startad av henkepenka

henkepenkaMedlem sedan sep. 2002125 inlägg
#1

Hej, jag har en if-sats där olika typer av SQL-strängar byggs. Efter denna if-sats vill jag köra den SQL-sträng som blev utvald.

Såhär ser t.ex. en SQL-sträng ut:

$SQL = 'SELECT * FROM movies WHERE movieTitle Like '%"" .$_POST['searchvalue']. ""%' ORDER BY movieTitle LIMIT';

Och såhär ser SQL-satsen ut:

$results = mysql_query("". $SQL . "" . $from_records . "," . $max_per_page);

Jag har förmodligen något fel här, för när jag ska loopa igenom alla poster med:

while ($r = mysql_fetch_array($results))

Så får jag detta felmeddelande:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\appserv\www\movies\listmovies.php on line 303

Och rad 303 är just:

while ($r = mysql_fetch_array($results))

Någon som kan se felet?

MvH //
Henrik

@ndersMedlem sedan juni 200032 969 inlägg
#2

1:

$SQL = "SELECT * FROM movies WHERE movieTitle Like '%" .$_POST['searchvalue']. "%' ORDER BY movieTitle LIMIT 1";

2: Varför konkatenerar du tom sträng före och efter SQL-frågan i mysql_query()?
3: Tänk på SQL injection.

(om du har med LIMIT i SQL-frågan måste du ju också ha med ett antal. det är väl en av orsakerna till att det inte fungerar.)

edit: nu har jag läst ditt konkateneringskladd en gång till, och ser att antalet till limit nog hakar på i $from_records, så då kan du ju kanske bortse från mitt parentestillägg.

MatteMedlem sedan aug. 20002 975 inlägg
#3

Fast du bör nog lägga till ett mellanslag mellan LIMIT och värdet.

aasahMedlem sedan mars 20034 471 inlägg
#4

Jag tycker det verkar som om dina %-tecken hamnar utanför strängen? Dessutom stänger du strängen felaktigt eftersom du använder ' ytterst också, vilket gör att SQL:s startsträng fungerar som stoppsträng för SQL-frågan. Byt till " ytterst. Notera också inskjutna mellanslag: efter LIMIT och , i nedre satsen.

$SQL = "SELECT * FROM movies WHERE movieTitle Like '%".$_POST['searchvalue']."%' ORDER BY movieTitle LIMIT ";
$results = mysql_query($SQL .$from_records.", ".$max_per_page);
136 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)