Error na mysql_fetch_assoc
Ik gebruik volgende code:
Code (php)
1
2
3
4
2
3
4
$cat = $_DBC->sql_query("SELECT * FROM ".$_table['sites']." WHERE id='".$row['site_id']."'",0);
$getcat = $_DBC->sql_fetch_assoc($cat);
$catdef = $_DBC->sql_query("SELECT * FROM ".$_table['category_nl']." WHERE id='".$getcat['category']."'",0);
$cats = $_DBC->sql_fetch_assoc($catdef);
$getcat = $_DBC->sql_fetch_assoc($cat);
$catdef = $_DBC->sql_query("SELECT * FROM ".$_table['category_nl']." WHERE id='".$getcat['category']."'",0);
$cats = $_DBC->sql_fetch_assoc($catdef);
Maar bij het laten zien van $cats['naam'] krijg ik steeds volgende error:
Code (php)
1
2
2
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id='122'' at line 1
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in functions.php on line 34
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in functions.php on line 34
Lijn 34 is:
Ik weet niet goed hoe dit veroorzaakt wordt...
Verder misschien ook nog volgende vraag: is het misschien mogelijk die twee query's in 1 keer te laten uitvoeren?
Thanks
En waarom heb je je eigen object, terwijl het precies hetzelfde doet? Dan kan je beter kijken naar PDO of MySQLi.
Je loopt nu tegen het feit aan dat je niet weet welke variabelen waarde een fout bevat dan wel wel of niet bestaat enz enz enz.
Pas fatsoenlijk debug en foutafhandeling toe, dan voorkom je dat je dit soort raadsels voor je kiezen krijgt.
Mijn $_table['category_nl'] bleek leeg te zijn, ik was hem domweg vergeten te definiëren :s
Quote:
Ik weet niet goed hoe dit veroorzaakt wordt...
Mocht dat nog niet duidelijk zijn uit voorgaande twee posts: dit wordt veroorzaakt door een fout in je SQL query. Probleem is nu alleen dat, zoals Noppes al zegt, moeilijk te achterhalen is waar de fout zit. Als je je query vooraf in een variabele zet (in je sql_query() method of nog daarvoor), kun je bij een foutmelding deze variabele weergeven zodat je weet hoe je query eruit zag toe hij uitgevoerd werd. Dan is de fout een stuk makkelijker op te sporen...
Code (php)
1
2
2
$var = sql_query("SELECT * FROM ".$_table['sites']." WHERE id='".$row['site_id']."'",0);
$cat = $_DBC->$var;
$cat = $_DBC->$var;
?
Code (php)
1
2
3
4
2
3
4
<?php
$sql = "SELECT * FROM ".$_table['sites']." WHERE id=".$row['site_id'];
$cat = $_DBC->sql_query($sql);
?>
$sql = "SELECT * FROM ".$_table['sites']." WHERE id=".$row['site_id'];
$cat = $_DBC->sql_query($sql);
?>
En dan uiteraard in sql_query() wel de nodige foutafhandeling als de daadwerkelijke query mislukt. $sql is nu de var die je kunt echoën als de query de fout in gaat.
ps. Overigens is dit natuurlijk niet nodig als je de foutafhandeling volledig in sql_query() doet. De benodigde variabele is dan gewoon de query die je als parameter op geeft...
Ik lees ook gelijk even http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/algemene-structuur/1930/ door :)
Een freubeltje wat het een en ander duidelijk moet maken
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
classe DB {
function setQuery($sql) {
$this->query = $sql;
}
function getError() {
return mysql_error($this->result).'<br />'.$this->query;
}
function qryExecute() {
if (($this->result = mysql_query($this->query)) !== false) {
return true;
}
else {
return false;
}
}
}
$db = new DB();
$db->setQuery("SELECT * FROM WHERE id = 'hoopgeblaat'");
if ($db->qryExecute === false) {
echo $db->getError();
}
?>
classe DB {
function setQuery($sql) {
$this->query = $sql;
}
function getError() {
return mysql_error($this->result).'<br />'.$this->query;
}
function qryExecute() {
if (($this->result = mysql_query($this->query)) !== false) {
return true;
}
else {
return false;
}
}
}
$db = new DB();
$db->setQuery("SELECT * FROM WHERE id = 'hoopgeblaat'");
if ($db->qryExecute === false) {
echo $db->getError();
}
?>
simpeler:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$sql = "SELECT * FROM WHERE id = 'hoopgeblaat'";
if (($result = mysql_query($sql)) === false) {
/* dit is debugcode welke je zult moet hebben maar dan op een iets andere
manier, als een query mislukt dan dien je een alternatief daarvoor te
hebben zodat je code die afhaneklijk hiervan is gewoon doorlopen kan worden
of wordt uitgesloten.
*/
echo mysql_error().'<br />'.$sql;
}
?>
$sql = "SELECT * FROM WHERE id = 'hoopgeblaat'";
if (($result = mysql_query($sql)) === false) {
/* dit is debugcode welke je zult moet hebben maar dan op een iets andere
manier, als een query mislukt dan dien je een alternatief daarvoor te
hebben zodat je code die afhaneklijk hiervan is gewoon doorlopen kan worden
of wordt uitgesloten.
*/
echo mysql_error().'<br />'.$sql;
}
?>