In mijn huidige PHP script staan de SQL query's 'gewoon' in de PHP code. Ik wil het script vereenvoudigen en één van de ideeën die ik hiervoor heb ik het opslaan van een query in de database.
De huidige query in PHP ziet er zo uit:
In PHP werkt dit.
Echter, als ik de tekst van de query (SELECT * FROM items WHERE id = $id) in een tekstveld in de database opsla. Deze ophaal, in een string zet en die weer wil uitvoeren middels mysql_query dan gaat het mis.
De gehele code posten is een beetje lastig omdat ik gebruik maak van objecten. Maar in het kort komt het hier op neer:
Dit werkt niet als ik een variabele in de query (die in de db staat) gebruik: SELECT * FROM items WHERE id = $id
Maar zonder variabele werkt het prima: SELECT * FROM items WHERE id = 1
Ik denk dat er iets mis gaat omdat PHP de opgehaalde string niet meer 'parsed' dus $id wordt nooit vervangen door 1.
Nu heb ik hier twee vragen:
1) Kan ik er voor zorgen dat dit wel werkt?
Ik zat er zelf al aan te denken om de string die ik ophaal uit de database weer te parsen en dan zelfs $id te vervangen door de waarde waar ik op wil zoeken (in dit voorbeeld 1). Maar dat levert al snel veel code op en ik had juist gehoopt dit te voorkomen. Is er een snelle methode of wellicht een commando dat ik volledig over het hoofd zie?
2) Is het verstandig om queries op te slaan in de database?
En ja, ik weet dat bovenstaande code lelijk is, en je moet oppassen met variabelen in queries maar dit is even een proof of concept.
De huidige query in PHP ziet er zo uit:
PHP:
1
2
3
| $query = "SELECT * FROM items WHERE id = $id"; $result = mysql_query ( $query ); $return = mysql_fetch_object($result); |
In PHP werkt dit.
Echter, als ik de tekst van de query (SELECT * FROM items WHERE id = $id) in een tekstveld in de database opsla. Deze ophaal, in een string zet en die weer wil uitvoeren middels mysql_query dan gaat het mis.
De gehele code posten is een beetje lastig omdat ik gebruik maak van objecten. Maar in het kort komt het hier op neer:
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
| class ItemType { private $queryget; function get_queryget() { return $this->queryget; } function db_getItemTypeById($id) { $query = "SELECT * FROM itemtype WHERE ID = $id"; $result = mysql_query ( $query ); $row = MySQL_fetch_array ( $result ); $this->queryget = $row ["queryget"]; } } $item_type = new ItemType (); $item_type -> db_getItemTypeById(1); $id = 1; $query = $itemtype -> get_queryget(); $result = mysql_query ( $query ); $return = mysql_fetch_object($result); |
Dit werkt niet als ik een variabele in de query (die in de db staat) gebruik: SELECT * FROM items WHERE id = $id
Maar zonder variabele werkt het prima: SELECT * FROM items WHERE id = 1
Ik denk dat er iets mis gaat omdat PHP de opgehaalde string niet meer 'parsed' dus $id wordt nooit vervangen door 1.
Nu heb ik hier twee vragen:
1) Kan ik er voor zorgen dat dit wel werkt?
Ik zat er zelf al aan te denken om de string die ik ophaal uit de database weer te parsen en dan zelfs $id te vervangen door de waarde waar ik op wil zoeken (in dit voorbeeld 1). Maar dat levert al snel veel code op en ik had juist gehoopt dit te voorkomen. Is er een snelle methode of wellicht een commando dat ik volledig over het hoofd zie?
2) Is het verstandig om queries op te slaan in de database?
En ja, ik weet dat bovenstaande code lelijk is, en je moet oppassen met variabelen in queries maar dit is even een proof of concept.
..so be wary of any man who keeps a pig farm..