syntax error unexpected T_PUBLIC
Pagina: « vorige 1 2 3 volgende »
Alsof je een kast koopt, deze blauw verft en vervolgens weer gaat schuren en lakken zodat hij weer zijn originele kleur krijgt...
if($this->connector == "mysql")
moet dat niet zijn:
if($this->config->connector == "mysql")
heb nu dat stukje weggehaald en krijg nog steeds geen resultaat. mijn error log is leeg en op mijn scherm zie ik niets van de resultaten. wel krijg ik een ping terug als ik via de class naar mijn database ping. dus er gaat iets fout tussen table ophalen en de output. alleen zie ik niet wat. is er een handige manier om dit alsnog te kunnen debuggen?
hier mijn class tot nu toe. http://pastebin.com/a1HM09dD
@erwin die fout had ik ook al gezien inderdaad! had het al aangepast :)
Gewijzigd op 09/06/2012 20:24:45 door Reshad F
Verder debuggen, goed je code doorlezen en verder aan het begin van elke functie even tijdelijk een echo plaatsen, zodat je weet dat de bewuste functie is aangeroepen. Loopt hij door alle functies heen, dan is de volgende stap om vanaf achteraan al je output en input per functie te controleren. Dus dat echoen bijvoorbeeld.
http://pastebin.com/x7xbWjjQ
verder gebruik ik mysql dus die mysqli dingen zouden niet eens goed hoeven zijn neem ik aan. maar heb het aangepast.
ik ga even overal een echo voor zetten. kijken of het wat uithaalt.
ik heb even ook mijn index.php op pastebin gezet voor de zekerheid miss dat daar wat fout zit? verder gebruik ik mysql dus die mysqli dingen zouden niet eens goed hoeven zijn neem ik aan. maar heb het aangepast.
ik ga even overal een echo voor zetten. kijken of het wat uithaalt.
Wat ik in elk geval vreemd vind is dat je in de query method de uitkomst van de SQL query opslaat in $this->lastQuery. Die geef je daarna als result terug (waarom) en geef je ook mee in de method hasRows(). In hasRows kan je natuurlijk ook gewoon de opgeslagen resource gebruiken.
kzal proberen om die tips die ik eerder meekreeg er ook in te verwerken en als ik er niet uitkom zal ik weer even posten maar zal ook even die objecten even goed opzetten dan kunnen we daar naar kijken.
$this->lastQuery = mysql_query($this->escapeString($query));
Dus de hele query geef je aan de methode escapeString en daarin voer je de mysql_real_escape_string uit, op de hele query dus.
Als je nu als query dit hebt:
"SELECT lokatie_id, lokatie_naam FROM lokaties WHERE lokatie_naam = 'd'"
Dan wordt de query die je wilt uitvoeren:
"SELECT lokatie_id, lokatie_naam FROM lokaties WHERE lokatie_naam = \'d\'"
En die gaat niet werken. Ik heb het net getest. Je zal hier dus serieus iets anders moeten bedenken.
hm dus iets als de query in een variable zetten en dan de escapeString erin?
Alleen de gebruikers input moet je escapen. Verder niets.
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
31
32
33
34
35
36
37
38
39
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
31
32
33
34
35
36
37
38
39
<?php
public function query($query)
{
try
{
if(empty($this->connection))
{
$this->openConnection();
if($this->config->connector == "mysql")
{
$this->lastQuery = mysql_query($query);
}
elseif($this->config->connector == "mysqli")
{
$this->lastQuery = mysqli_query($this->connection, ($query));
}
$this->closeConnection();
return $this->lastQuery;
}
else
{
if($this->config->connector == "mysql")
{
$this->lastQuery = mysql_query($query);
}
elseif($this->config->connector == "mysqli")
{
$this->lastQuery = mysqli_query($this->connection, ($query));
}
return $this->lastQuery;
}
}
?>
public function query($query)
{
try
{
if(empty($this->connection))
{
$this->openConnection();
if($this->config->connector == "mysql")
{
$this->lastQuery = mysql_query($query);
}
elseif($this->config->connector == "mysqli")
{
$this->lastQuery = mysqli_query($this->connection, ($query));
}
$this->closeConnection();
return $this->lastQuery;
}
else
{
if($this->config->connector == "mysql")
{
$this->lastQuery = mysql_query($query);
}
elseif($this->config->connector == "mysqli")
{
$this->lastQuery = mysqli_query($this->connection, ($query));
}
return $this->lastQuery;
}
}
?>
en ik krijg ook de oh zo veelvoorkomende melding. PHP Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given in ....
nu heb ik even gegoogled hoe dit op te lossen maar er kwam steeds antwoorden als in een while zetten. moet ik dit dan doen wanneer ik de functie oproep of in de functie zelf al? want met spaghetti code zou je dat al natuurlijk gelijk doen ik weet niet hoe in OOP..
Gewijzigd op 10/06/2012 10:48:58 door Reshad F
Maar dit:
Reshad F op 10/06/2012 10:48:19:
en ik krijg ook de oh zo veelvoorkomende melding. PHP Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given in ....
Betekent gewoon dat je query niet gelukt is. mysql_query geeft een resource terug, of false als je query fout gaat.
Het is dus zaak om ALTIJD je return waarde te controleren. Is het false (checken met === false) dan moet je aan foutafhandeling gaan doen.
$sql = $db->lastQuery("SELECT
id, username, pass, age, gender
FROM
testTable
");
if($sql === false)
{
echo "<br>de tabel werd niet benaderd :(";
}
else
{
$hasRows = $db->hasRows($sql);
if($hasRows == 0)
echo "<br>geen rijen";
else
{
echo "<br>Het Heeft: " . $hasRows . " rijen";
}
}
maar krijg alsnog de error. wat wel vreemd is dat de query in phpmyadmin het wel gewoon doet
Hoe kan je daar nu een query string aan meegeven?
Warning: Missing argument 1 for db::lastQuery(), called in /Applications/MAMP/htdocs/library/index.php on line 51 and defined in /Applications/MAMP/htdocs/library/class.db.php on line 73
Notice: Undefined variable: query in /Applications/MAMP/htdocs/library/class.db.php on line 99
de 2e snap ik maar die 1ste die line 73 in mijn class dat is de functie waarin ik lastQuery uitvoer. ik krijg nu wel trouwens gewoon de gewenste resultaat. van de query maar wat is die argument die ik mis?
Wat let je om die regels die genoemd worden gewoon even te bekijken? Wat er fout gaat staat dus letterlijk in die foutmelding!
public function lastQuery($query = "query") van moet maken
ipv
public function lastQuery($query) te kunnen gebruiken.
:)
Dit:
public function lastQuery($query = "query")
betekent dat $query een default waarde heeft en dus niet hoeft te worden meegegeven. Wordt er namelijk niets in de aanroep meegegeven, dan wordt de default gebruikt.
Geef je geen default waarde in de definitie van de methode (functie in zijn algemeenheid) dan moet je altijd een waarde meegeven in een aanroep.
Maar dit strookt totaal niet meer met wat je eerst had ten aanzien van de methode lastQuery().
wat strookt er niet met lastQuery() methode? 2
p.s. de code doet voor de rest nu wat het doen moet. ik kan rijen ophalen en weergeven etc etc. alleen begrijp ik het argument gedeelte niet helemaal maar daar ga ik wel even achteraan.
verder zal ik nu ook de manier die wouter gepost had even toepassen om te zien hoe dat uitpakt.
Ga ook niet zomaar code kopiëren, daar schiet je niks mee op.
Bedenk eerst eens hoe je je klasse eruit wilt laten zien, wat methods moeten doen, ect. Dit teken je dan op een papiertje, met UML diagrammen, of je doet het met een soort van PHP:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
class Db
{
/**
* Var met de config data erin (wordt geset in de constructor).
*/
protected $config;
/**
* Constructor.
*
* @param Config $config De config klasse die een verbinding maakt
*/
public function __construct($config)
{
# set config
}
/**
* Run een query op de geselecteerde DB.
*
* @param string $query De query die uitgevoerd moet worden
*
* @return resource Het resultaat na het uitvoeren van de query
*/
public function query($query)
{
# execute query
# return resultaat
}
/**
* Maak van de resultaten resource een assoc array
*
* @param resource $result De resultaten resource
*
* @return array De assoc array met alle resultaten
*/
public function fetchAssoc($result)
{
# fetch de resultaten
# return assoc array
}
// enz.
}
?>
class Db
{
/**
* Var met de config data erin (wordt geset in de constructor).
*/
protected $config;
/**
* Constructor.
*
* @param Config $config De config klasse die een verbinding maakt
*/
public function __construct($config)
{
# set config
}
/**
* Run een query op de geselecteerde DB.
*
* @param string $query De query die uitgevoerd moet worden
*
* @return resource Het resultaat na het uitvoeren van de query
*/
public function query($query)
{
# execute query
# return resultaat
}
/**
* Maak van de resultaten resource een assoc array
*
* @param resource $result De resultaten resource
*
* @return array De assoc array met alle resultaten
*/
public function fetchAssoc($result)
{
# fetch de resultaten
# return assoc array
}
// enz.
}
?>
Ga pas als je alles klaar hebt en alle logica klopt beginnen met het invullen van de functies en het schrijven van de code.