mboost-dp1

mysql_fetch_array i mysql_fetch_array


Gå til bund
Gravatar #1 - djrasmusp
20. jan. 2010 07:42
Hey Alle sammen...

Jeg har et problem, jeg vil gerne lave et sortering af nogle celle i en tabel, hvor jeg skal have et id fra, og derefter udskriver alle celler fra en anden tabel, hvor det id passer sammen med...

min kode ser ud som følgende:
$header = mysqli_query($dbc, "SELECT Id,title FROM header ORDER BY sort");
while ($rs_h = mysqli_fetch_array($header)) {
echo'
<h1>'.$rs_h['title'].'</h1>
<table border="0" width="600px">
<tbody>';
$prices = mysqli_query($dbc, "SELECT title, price FROM prices WHERE grp=".$rs_h['Id']."ORDER BY title");
while ($rs = mysqli_fetch_array($prices)) {
echo'
<tr>
<td>'.$rs['title'].'</td>
<td class="price">'.$rs['price'].'</td>
</tr>';
}
echo'
</tbody>
</table>';
}


men når jeg executer koden, får jeg følgende fejl:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\wamp\www\am\index.php on line 27

og line 27 er while ($rs = mysqli_fetch_array($prices)) {

Nogen, der kan give mig et råd til hvordan jeg laver det jeg søger.
Gravatar #2 - Niklas H
20. jan. 2010 07:53
Da jeg lige kiggede kort på koden, fandt jeg ud af at du mangler et mellemrum i din SQL query. Prøv nedenstående kode:


$header = mysqli_query($dbc, "SELECT Id,title FROM header ORDER BY sort");
while ($rs_h = mysqli_fetch_array($header)) {
echo'
<h1>'.$rs_h['title'].'</h1>
<table border="0" width="600px">
<tbody>';
$prices = mysqli_query($dbc, "SELECT title, price FROM prices WHERE grp=".$rs_h['Id']." ORDER BY title");
while ($rs = mysqli_fetch_array($prices)) {
echo'
<tr>
<td>'.$rs['title'].'</td>
<td class="price">'.$rs['price'].'</td>
</tr>';
}
echo'
</tbody>
</table>';
}
Gravatar #3 - Windcape
20. jan. 2010 07:58
mysqli_fetch_array($prices) retunere en iterator, ikke en boolean. Og signaturen for where er følgende: where(parameter : boolean)

Altså du bruger mysqli_fetch_array fuldstændig forkert. Brug lidt tid på at læse op inde på http://dk.php.net/mysqli_fetch_array

(Jeg skal til et møde nu, så kan ikke nå at skrive et eksempel.)
Gravatar #4 - Niklas H
20. jan. 2010 08:32
#3 Windcape

Nu har jeg aldrig brugt MySQLi Procedural, men tror ikke det adskiller sig særlig meget fra OOP-fremgangsmåden. Men måden han bruger, er altså helt "lovlig" / "brugbar" - betragt nedenstående kode-eksempel, som virker:


$sql = $DBcon->query("SELECT * FROM dbtable");
while ($row = $sql->fetch_assoc()) {
$temp[] = $row;
}
Gravatar #5 - Niklas H
20. jan. 2010 08:37
Det bliver blandt andet "diskuteret" i kommentarerne på denne side:

usphp.com
Gravatar #6 - Windcape
20. jan. 2010 11:21
Ja, læste vist forkert i farten.

Jeg undre mig dog meget over brugen af procedural MySQLi.
Gravatar #7 - arne_v
20. jan. 2010 14:05
#6

PHP har valgt at lave både et proceduralt og et objekt orienteret API for mysqli.

Nogen bruger det ene - nogen bruger det andet.
Gravatar #8 - arne_v
20. jan. 2010 14:08
#1

Generelt med hensyn til troubleshooting, så er i tilfælde af fejl, så brug:

die($con->error)

eller

die(mysql_error())

[igen afhængig af p versus oo]

så får du en fejl besked.


Gravatar #9 - arne_v
20. jan. 2010 14:09
#1 m.fl.

Kunne den nestede query ikke ersatttes as en enkelt query med join??
Gravatar #10 - djrasmusp
21. jan. 2010 00:03
fandt ud af fejlen... og den er ganske pinlig..
efter jeg brugte #8 råd, fandt jeg ud af at jeg havde brugt de forkerte navne på cellerne, da jeg havde glemt at jeg havde haft dem ændret :/
Gravatar #11 - T-Hawk
21. jan. 2010 06:17
arne_v (9) skrev:
#1 m.fl.

Kunne den nestede query ikke ersatttes as en enkelt query med join??


Som jeg læser det, jo bestemt da, noget lignende:

SELECT title, price FROM prices WHERE grp IN (SELECT Id FROM some_table WHERE some_constraint) ORDER BY title
Gravatar #12 - arne_v
29. jan. 2010 02:35
#11

Nu er det en subselect og ikke en join, men det kan tit erstatte hinanden.
Gravatar #13 - T-Hawk
29. jan. 2010 07:18
#12
True that, mig der ikke tænker mig om.

Så måske snarere

SELECT title, price FROM prices, some_table WHERE prices.grp = some_table.grp AND some_constraint_on_some_table ORDER BY title
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login