webForumDet fria alternativet

något mysql_fetch_array() fel..

12 svar · 250 visningar · startad av pakmannen

pakmannenMedlem sedan dec. 2002227 inlägg
#1

När jag använder OR i:
$data = mysql_db_query("cvalda", "SELECT * FROM artiklar WHERE rubrik LIKE '%$query%' OR text LIKE '%$query%'");

så får jag följande fel:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /export/vol1/unix/c/cvalda/public_html/cvalda/search.php on line 51

Det är väl här felet ligger:
while ($rad = mysql_fetch_array ($data))
{
print "<font size=\"4\">Resultat:</font><p>";

print "<b>"; print $rad["rubrik"]; print "</b>";
print "<br>Av: ";
print $rad["författare"];
print "<p>";
}

Det knäppiga är att jag använt "mysql_fetch_array" hela tiden och det har inte blivit något problem. Men nu så.. Kan man använda något annat än "mysql_fetch_array" för att skriva ut det man hämtat från databasen?

GunnarDMedlem sedan juni 20014 290 inlägg
#2

Kan betyda att det din sql sträng är fel på något sätt.
Prova att köra mysql_erro() efter mysql_db_query().

FlashesMedlem sedan jan. 2003282 inlägg
#3

Jag är helt ny på det här men måste du använda dig av LIKE?

När jag skriver en liknande fråga så skriver jag
WHERE cert='1-stjärnigt CMAS' OR namn='Janne'

Men det kanske beror på att du använder dig av %$query% som argument och inte fasta argument som jag har?

Mvh
Jan-Olov

pakmannenMedlem sedan dec. 2002227 inlägg
#4

GunnarD:
Jag tror inte den är fel, för jag frågade på SQL forumet och det var nåt snille där som sa hur man skulle skriva det där med OR och LIKE.

Flashes:
Japp, det är för att jag använder %$query%

För att använda den där error grejen, skriver man bara det efter db_query eller?

GunnarDMedlem sedan juni 20014 290 inlägg
#5

Ett vanligt sätt att använda mysql_error är så här:

$sql    = 'SELECT * FROM tablename';
$result = mysql_query($sql) or die(mysql_error());

Jag har fått liknande fel ett par gånger och i alla gångerna har det varit fel i SQL uttrycket.

Du kan ju också skriva så här när du felsöker för att få alla meddelanden som genereras från mysql_query.

$sql    = 'SELECT * FROM tablename';
$result = mysql_query($sql);
mysql_error();
pakmannenMedlem sedan dec. 2002227 inlägg
#6

Hm, nu är jag mycket förvirrad, jag testade att lägga in:
$result = mysql_query($sql) or die(mysql_error());

och då stod det att det var fel på SQL utrycket, men om jag ändrar om det till ett helt vanligt uttryck som jag använt hela tiden och som fungerar problemfritt som tex:

$open = mysql_connect("host", "user", "pass");
$data = mysql_db_query("cvalda", "SELECT * FROM artiklar WHERE id = '5'");
$result = mysql_query($data) or die(mysql_error());

mysql_close($open);

while ($rad = mysql_fetch_array ($data))
{
print "<font size=\"4\">Resultat:</font><p>";

print "<b>"; print $rad["rubrik"]; print "</b>";
print "<br>Av: ";
print $rad["författare"];
print "<p>";
}

Så står det fortfarande att det är fel i SQL utrycket, trots att det fungerar.
Jag fattar noll alltså! Vad är det för fel i SQL utrycket den snackar om egentligen?
Står så här:

You have an error in your SQL syntax near 'Resource id #2' at line 1

GunnarDMedlem sedan juni 20014 290 inlägg
#7

Först ett litet citat från https://www.php.net

Note: This function has been deprecated since PHP 4.0.6. Do not use this function. Use mysql_select_db() and mysql_query() instead.

Är du säker att det finns kolumner i databasen cvalda som heter artiklar och id?

Bara som test: om du skriver om det så att du använder dom nya funktionerna:

$open = mysql_connect("host", "user", "pass");
$db=mysql_select_db("cvalda", $open);
$query="SELECT * FROM artiklar WHERE id = '5'"
$data = mysql_query($query); or die(mysql_error());

while ($rad = mysql_fetch_array ($data))
{
print "<font size=\"4\">Resultat:</font><p>";

print "<b>"; print $rad["rubrik"]; print "</b>";
print "<br>Av: ";
print $rad["författare"];
print "<p>";
} 
mysql_close($open);
pakmannenMedlem sedan dec. 2002227 inlägg
#8

Det är ju tabellen i databasen "cvalda" som heter "artiklar" och i den finns en rad som heter "id". Så säger SQL utrycket.

Vilken funktion är det som inte finns längre? mysql_db_query()?

GunnarDMedlem sedan juni 20014 290 inlägg
#9

Självklart, och du är snabb på att läsa, jag han inte redigera in kodsnutten :)

pakmannenMedlem sedan dec. 2002227 inlägg
#10

Heh, jo, jag är lite desperat bara.. :)

Men, ska det vara ett ";" i slutet av:
$query="SELECT * FROM artiklar WHERE id = '5'"
?

Plus att den inte verkar gilla "or" i:
$data = mysql_query($query); or die(mysql_error());

säger så här:
Parse error: parse error, unexpected T_LOGICAL_OR in /

EDIT: Äsch, det skulle bara inte vara ett ";" efter mysql_query($query)

Men nu till en helt annan fråga, som säkert är mycket lättare.. Detta är då alltså min patetiska sökmotor och jag hade tänkt göra så att man kan söka på flera ord och separera dom med typ "+" tecken eller nåt. Så jag delade upp sökqueryn i en array med explode() så här:

$search = explode("+",$search);

Sen vill jag ju i SQL grejen selecta alla värden på $seach, så jag testade typ $search[%] men det fungerade ju inte.. Så hur skriver man?

En sak till, hur kommer det sig att all annan kod fungerar om jag har använt grejer som tydligen inte finns längre? (Borde jag byta ut dom grejerna också?)

GunnarDMedlem sedan juni 20014 290 inlägg
#11

Små typo tydligen.

$query raden skall avslutas med ; efter " tecknet.

I $data... raden, ta bort ; som står före "or die".

(satt och klippte/klistrade en del) :)

För framtida bruk så bör du byta ut dom funktioner som är "deprecated" eftersom dom antagligen kommer att försvinna i framtida versioner av php, men om du behöver göra det just nu för att lösa ditt problem är jag tvecksam till.

pakmannenMedlem sedan dec. 2002227 inlägg
#12

Men, nu var det ju du som va snabb ju! :)

Jo, jag märkte det, jag editade mitt förra post (och kom med ÄNNU en fråga..)
Men alltså det fungerade faktiskt! Helt chockad faktiskt. Men tack i alla fall! :)

(Kolla in mitt förra post..)

pakmannenMedlem sedan dec. 2002227 inlägg
#13

Hm, en grej angående att byta ut den gamla koden mot den nya, det verkar inte fungera med INSERT i sql. Fast det fungerade med alla SELECT. Men det går alltså inte att lägga till information verkar det som.. :P

Skriver så här:

$open = mysql_connect("host", "user", "pass");
$db = mysql_select_db("cvalda", $open);
$query = "INSERT artiklar (rubrik, innehåll, email, författare, datum) VALUES ('$rubrik', '$innehåll', '$email', '$författare', '$datum')";

Behöver man skriva något mer med den nya koden eller?

EDIT: Argh! Jag glömde ju:
mysql_query($query);

Fan, det här är mycket rörigare än vad det var innan! :)

130 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)