prepared statements ZONDER WHERE STATEMENT

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Als PHP developer bijdragen aan beter onderwijs?

Functie Momenteel zijn ze op zoek naar een PHP developer die mee gaat werken aan de (door)ontwikkeling van de producten en zo helpt aan de uitvoering van hun ontwikkelprojecten. Je komt te werken binnen hun development team bestaande uit 6 ontwikkelaars. Ze staan zowel open voor meer junior als medior/senior developers. Je kunt snel veel verantwoordelijkheid krijgen en doorgroeien binnen het bedrijf. Bovendien ben je betrokken bij het bepalen van de product roadmap en de inbreng van (nieuwe) technologieën. De applicaties waaraan je werk worden gebruikt op onderwijsinstellingen door heel Nederland. De tech-stack bestaat voornamelijk uit Laravel (PHP), Vue.js en

Bekijk vacature »

Software Developer

Functie omschrijving Psst hé jij daar! Op zoek naar een nieuwe uitdaging als developer? Wacht niet langer en reageer direct. In deze functie ga je bij een familiebedrijf werken als developer. Je gaat maatwerk software ontwikkelen met de Microsoft stack. Je gebruikt technieken als C#, ASP.NET en MVC. Je werkt in een leuk team van andere developers. Je krijgt veel vrijheid in je werk en kan flexibel werken. Dagje thuiswerken? Geen probleem! Daarnaast is er veel ruimte om écht mee te denken met het bedrijf en met de klanten. Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Vanaf

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

.Net Ontwikkelaar

Dit ga je doen Het ontwerpen en ontwikkelen van software voor klanten; Het bijdragen van kennis en ervaring; Het integreren van van de software en afstemmen met klanten; Het functioneel testen van de ontwikkelde software. Hier ga je werken Voor onze relatie zijn wij momenteel op zoek naar een .Net Developer die wilt werken aan software die draait op machines wereldwijd. De organisatie produceert software voor applicaties die gebruikt worden in verschillende branches. De software wordt geleverd aan fabrikanten van verschillende robotica en machines. Als .Net ontwikkelaar ben je intern onderdeel van het team wat de applicatie omgevingen ontwikkeld en

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

PHP Developer Symfony

Dit ga je doen Ontwikkelen van Product Informatie Management (PIM) systemen; Werken aan zowel grotere als kleine projecten voor toonaangevende klanten binnen o.a. de retail. Hier ga je werken Als PHP Developer kom je te werken binnen een vooruitstrevende organisatie die Product Informatie Management (PIM) systemen levert aan hun klanten. Hun klanten zijn toonaangevende bedrijven binnen o.a. de retail. De organisatie zit gevestigd in regio Zwolle en bestaat uit zo'n 35 medewerkers, waarvan 30 IT. Je komt te werken binnen één van de zelfsturende development teams welke ieder verantwoordelijk zijn voor hun 'eigen' klanten. Jouw team bestaat uit 6 backend

Bekijk vacature »

Traineeship Full Stack .NET Developer

Dit ga je doen Start op 7 augustus 2023 bij de Experis Academy en ontwikkel jezelf tot een gewilde Full Stack .NET Developer. Maar hoe ziet het traineeship eruit en wat kun je verwachten? Periode 1 De eerste 3 maanden volg je fulltime, vanuit huis, een op maat gemaakte training in teamverband. Je leert belangrijke theorie en krijgt kennis van de benodigde vaardigheden en competenties die nodig zijn om de IT-arbeidsmarkt te betreden. Zowel zelfstandig als in teamverband voer je praktijkopdrachten op het gebied van front- en backend development uit. Wat er per week op het programma staat kun je

Bekijk vacature »

.NET developer

Functie Voor jou als junior .NET ontwikkelaar staat er een flinke uitdaging klaar bij dit bedrijf waar jij veel van kan gaan leren. Zo willen zij een flinke uitbreiding doen op het webbased gedeelte dat zij nu hebben en willen zij het standaard deel gaan moderniseren. Jouw team is dan ook op zoek naar een junior .NET ontwikkelaar die het leuk vindt om op basis van research en development aan de slag te gaan. Jouw mening telt mee als het gaat om hoe en met wat deze applicaties gebouwd en herschreven gaan worden. Jouw functie bij dit bedrijf gaat dan

Bekijk vacature »

C# .NET Developer

Functie omschrijving Wij zijn op zoek naar een C# .NET Developer voor een leuke opdrachtgever in de omgeving van Hilversum! Voor een leuk bedrijf in de omgeving van Hilversum zijn wij op zoek naar een Back-end developer die klaar is voor een nieuwe uitdaging. Ben jij iemand die graag aan verschillende projecten werkt en het ook leuk vindt om bij klanten op bezoek te gaan? Dan ben jij de perfecte kandidaat! Deze functie is erg divers, je moet dus goed kunnen schakelen. Je komt te werken in een klein team van developers. Binnen het bedrijf hangt er een gemoedelijke informele

Bekijk vacature »

Frontend Developer - Leeuwarden

Als Frontend Developer bouw jij mee aan het onderwijs van de toekomst! In een scrum team werken met jonge en enthousiaste collega’s, moderne technieken, ruimte voor eigen ontwikkeling en op een proactieve wijze kunnen meewerken aan innovatie binnen het onderwijs. Magister is het state-of-the-art softwarepakket dat scholen in het voortgezet onderwijs op alle fronten ontzorgt. Van leerlingenadministratie tot het ondersteunen van individuele leerlijnen, van toegang tot digitaal lesmateriaal tot het plannen van het lesrooster. In de Magister app bedient Magister ruim 2,5 miljoen gebruikers waarvan, dagelijks meer dan 600.000 unieke. Hiermee is Magister de absolute marktleider in onderwijsland. Wat vragen

Bekijk vacature »

Lead javascript developer Node.js React

Functie Als fullstack JavaScript developer vind jij het uitdagend om op basis van concrete klantvragen nieuwe functionaliteiten te ontwikkelen. Bij voorkeur worden deze functionaliteiten op een bepaalde manier geprogrammeerd, zodat ze door meerdere klanten te gebruiken zijn. Je hebt dus vaak te maken met abstracte vraagstukken. Om dit te kunnen realiseren sta je nauw in contact met de product owner en/of klant. Je bent niet alleen onderdeel van het development team, maar hebt ook vaak contact met de product-owner en/of klanten om daardoor inzichten te verzamelen die leiden tot productverbeteringen. • Inzichten verzamelen bij de klant en/of product owner •

Bekijk vacature »

Senior Java Developer

Als Senior Java Developer bij Sogeti ben je onderdeel van onze toonaangevende community die bestaat uit ruim 100 gepassioneerde Java professionals. In teamverband lever je mooie prestaties. Daarmee draag je aan bij de meerwaarde die wij leveren aan onze top-opdrachtgevers. Geen werkdag is hetzelfde! Je bent voortdurend bezig met het oplossen van allerlei complexe vraagstukken binnen bedrijfs kritische systemen voor onze klanten in regio Noordoost zoals DUO, ING, CJIB en Tendernet. Natuurlijk krijg jij de mogelijkheid je verder te certificeren in dit vakgebied. We organiseren regelmatig technische Meetups en doen veel aan kennisdeling. Sogetisten hebben plezier in hun werk en

Bekijk vacature »

Frontend Developer Vue Nuxt HBO Javascript

Samengevat: Deze werkgever levert elke dag betere digitale gebruikerservaringen. Ben jij geschikt als frontend Developer? Heb je ervaring met Vue en Nuxt? Vaste baan: Front-End Developer HBO €3.100 - €4.600 Zij bieden opdrachtgevers een complete dienstverlening op gebied van ontwerpen en ontwikkelen van websites, zoekmachine optimalisatie, online adverteren, content marketing en conversie verbetering. Zij werken met een eigen ontwikkeld CMS. Bij bij hun werk je aan onze eigen bedrijfsapplicaties. Je ontwikkelt met ons de meest nieuwe software. Wij blinken uit als het gaat om de inzet van technologie. Deze werkgever staat open voor elke nieuwe trend. Onze systemen zijn groot

Bekijk vacature »

Medior Front-end Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Medior Front-end Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »
Daniel van Seggelen

Daniel van Seggelen

17/05/2017 11:45:36
Quote Anchor link
Ik ben met repared statements nieuw en probeer het volgende.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$link = mysqli_connect("localhost", "user", "", "db"); //Establishing connection to the database , this is alias of new mysqli('')
$query="SELECT * FROM profiles";
$stmt = $link->prepare($query);
//$stmt->bind_param("s",$anti_injection); // binding the parameter to it
$stmt->execute(); //Executing
$result = $stmt->get_result();
while($row = $result->fetch_array(MYSQLI_ASSOC)) // we used MYSQLI_ASSOC flag here you also can use MYSQLI_NUM or MYSQLI_BOTH
{
//Do stuff
}


Ik krijg dan:

Call to a member function execute() on a non-object

Ik wil helemaal geen WHERE clause gebruiken in een query, is dat verplcith met een prepared statement?
Ik zie nergens een voorbeeld waar gewoon een query ZONDER WHERE CLAUSE gebruikt word in een prepared statement zoals:

"SELECT * FROM profiles"

Het lijkt me dan ook overbodig als je geen input waarde controleert.
Ik zie genoeg voorbeelden via google maar geen enkele zonder een WHERE statement.

UPDATE//opgelost met object connectie
Gewijzigd op 17/05/2017 17:46:19 door Daniel van Seggelen
 
PHP hulp

PHP hulp

24/04/2024 13:50:56
 
Ivo P

Ivo P

17/05/2017 13:47:42
Quote Anchor link
Je haalt 2 dingen door elkaar:
Eerst begin je procedureel mysqi_connect() aan te roepen.

Daarna zou je $stmt = mysqli_prepare($link, $query);
kunnen gebruiken.

of je gaat direct voor

$link = new mysqli("localhost", "user", "", "db");

waarna $link wel een object is (en wat een logischer idee is, gezien je de rest van je code weer oo werkt)

Zie ook de voorbeelden op http://php.net/manual/en/mysqli.prepare.php
 
Willem vp

Willem vp

17/05/2017 14:37:10
Quote Anchor link
@Ivo:

Alhoewel het niet aan te bevelen is om procedureel en object-georiënteerd door elkaar te gebruiken (het maakt je code niet per se beter te begrijpen) is het volledig legaal om het te doen; de PHP-documentatie noemt zelfs expliciet dat je de twee stijlen door elkaar kunt gebruiken (wat handig is als je bijvoorbeeld je code aan het omschrijven bent).

@Daniel:

De reden dat je geen codevoorbeelden zonder WHERE tegenkomt, is waarschijnlijk omdat het niet heel nuttig is om in een dergelijke situatie prepared statements te gebruiken. Ik zie overigens niet in waarom het niet zou kunnen. Zal zo eens kijken of ik e.e.a. op mijn eigen systeem kan reproduceren.
 
Thomas van den Heuvel

Thomas van den Heuvel

17/05/2017 15:46:19
Quote Anchor link
Daniel van Seggelen op 17/05/2017 11:45:36:
Call to a member function execute() on a non-object

Volg het kruimelpad terug. Ofwel het preparen gaat mis, ofwel het maken van een verbinding slaagt niet. Je controleert trouwens nergens of beide goed gaan...

Willem vp op 17/05/2017 14:37:10:
omdat het niet heel nuttig is om in een dergelijke situatie prepared statements te gebruiken.

Uniformiteit in het aanspreken van je database lijkt mij een pre.

PS en als je dan toch prepared statements wilt gebruiken dan is PDO wellicht een beter alternatief.
Gewijzigd op 17/05/2017 15:51:03 door Thomas van den Heuvel
 
Willem vp

Willem vp

17/05/2017 15:51:01
Quote Anchor link
> Ofwel het preparen gaat mis, ofwel het maken van een verbinding slaagt niet.

Het maken van de verbinding gaat goed, anders zou je bij de aanroep van prepare() al een foutmelding krijgen.
Dat betekent dat de fout in de query zelf moet zitten; hoogstwaarschijnlijk een tabel die niet bestaat in de geselecteerde database.

De code die in de eerste post staat werkt bij mij in ieder geval probleemloos.

Toevoeging op 17/05/2017 16:10:04:

> Uniformiteit in het aanspreken van je database lijkt mij een pre.

Tot op zekere hoogte. Als ik een schroef moet vastdraaien kijk ik ook eerst of ik een schroevendraaier maat 1, 2 of 3 nodig heb. Ik gebruik niet steevast maat 2, omdat dat nu eenmaal uniform is. Vaak krijg je de schroef er wel mee vast, maar het geeft niet per se het optimale resultaat.

Datzelfde heb ik met prepared statements. De meeste queries kun je inderdaad prepared uitvoeren, maar dat wil niet zeggen dat prepared altijd het beste is. En om een suboptimale oplossing te gebruiken, alleen maar vanwege de uniformiteit vind ik nogal indruisen tegen mijn kwaliteitsbesef. ;-)

Bij queries die je slechts 1x uitvoert, zou je je moeten afvragen of die de overhead van het prepareren waard zijn. Wanneer je prepareert om SQL injection tegen te gaan is die overhead meestal wel te verdedigen. In dit specifieke geval is daar geen sprake van en dan vind ik het zonde om daar het prepared statement-vehikel voor te gebruiken. Ook wanneer je een paar duizend records tegelijkertijd moet inserten is een prepared statement meestal niet aan te raden, want dat is significant trager dan een multi-insert (waarbij je dan wel zelf ervoor moet zorgen dat je geen SQL injection faciliteert).
Gewijzigd op 17/05/2017 16:10:43 door Willem vp
 
Daniel van Seggelen

Daniel van Seggelen

17/05/2017 17:04:48
Quote Anchor link
Bedankt voor de antwoorden.
Ik zie nu iets stoms, dat de queries een typo had in de tabelnaam bij het eerste voorbeeld, wat dus wel werkt, maar naast dat vraag ik mij af of er zonder input wel geadviseerd word om toch prepared statements te gebruiken zonder input?

Nog iets ik gebruik een class met de conn functie:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
class DBD extends MySQLi
{
    public $connection;
    public $lang = '';
    public function conn()
    {
        if (!$this->connection) {
            $this->connection = mysqli_connect(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME);
            mysqli_query($this->conn(),"set names 'utf8'");
            mysqli_query($this->conn(),"SET CHARACTER SET 'utf8'");
        }
        return $this->connection;
    }
}

// de connectie

$DBD = new DBD();

met dit krijg ik dezelfde fout, maar de connectie is toch een object?

$link = $DBD->conn(); //Establishing connection to the database , this is alias of new mysqli('')
$query="SELECT * FROM members";
$stmt = $link->prepare($query);
//$stmt->bind_param("s",$anti_injection); // binding the parameter to it
$stmt->execute(); //Executing


wat doe ik hier fout?
Gewijzigd op 17/05/2017 17:07:30 door Daniel van Seggelen
 
Thomas van den Heuvel

Thomas van den Heuvel

17/05/2017 22:52:00
Quote Anchor link
Willem vp op 17/05/2017 15:51:01:
Ook wanneer je een paar duizend records tegelijkertijd moet inserten is een prepared statement meestal niet aan te raden, want dat is significant trager dan een multi-insert (waarbij je dan wel zelf ervoor moet zorgen dat je geen SQL injection faciliteert).

Wut? Dat lijkt mij bij uitstek een situatie waar je prepared statements gebruikt. Maar dat is meestal niet de norm, en daarom gebruik ik standaard ook geen prepared statements omdat je geen meerwaarde hebt bij SELECT-statements.

Daniel van Seggelen op 17/05/2017 17:04:48:
Nog iets ik gebruik een class met de conn functie:
...
wat doe ik hier fout?


Deze class zit wel heel vreemd in elkaar. Maar wat in ieder geval niet aan te raden is is het instellen van een character encoding via SET NAMES en SET CHARACTER SET (doet dit laatste uberhaupt iets?). Hiervoor is de set_charset() methode.

Wat je je ook af zou moeten vragen is waarom je een wrapper gebruikt waarna je rechtstreeks met het gecreëerde mysqli-object gaat praten, wat is dan de meerwaarde van die class? Ook controleer je in geen van de stappen of de connectie slaagt. Op dit moment heeft heeft die class niet echt veel toegevoegde waarde, het neemt je geen werk uit handen.
 
Ivo P

Ivo P

18/05/2017 09:07:49
Quote Anchor link
je definieert nu een class van het type Mysqli. IN deze class neem je weer een property op die van het type mysqli is.

Vergelijk: een class van het type Auto. In deze auto kun je een aantal zaken vervoeren, bijvoorbeeld een persoon en een krat bier.
Maar nu geef je bij de te vervoeren items ook weer een auto op....

Doe het liever zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
class DBD extends MySQLi
{
    public $connection;
    public $lang = '';
    public function __construct()
    {

       parent::__construct(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME);
       $this->query("set names 'utf8'");
       $this->query("SET CHARACTER SET 'utf8'");
    }
}


// de connectie

$DBD = new DBD();

$query="SELECT * FROM members";
$stmt = $DBD->prepare($query);

$stmt->execute(); //Executing
[/code]

$DBD is nu op dezelfde manier te gebruiken als Mysqi, maar los van de automatische connectie opbouw, kun je nog een aantal functies zelf toevoegen, waarmee deze extend pas echt nuttig kan worden.

Maak van DBD niet een doorgeefluik naar Mysqli, maar maak het tot een uitbreiding van de Mysqli-class
 
Ward van der Put
Moderator

Ward van der Put

18/05/2017 09:14:13
Quote Anchor link
Het gaat hier fout:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class DBD extends MySQLi
{
    public $connection;
    public function conn()
    {

        if (!$this->connection) {
            $this->connection = mysqli_connect(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME);
        }
    }
}

?>

Je extendt objectgeoriënteerd de klasse MySQLi maar gebruikt vervolgens procedureel mysqli_connect() voor het openen van de verbinding.

MySQLi opent de verbinding bovendien al in de constructor, dus het heeft helemaal geen zin om dat nog een keer te doen met een aparte methode conn().

Wil je dat toch zo doen, dan extendt je MySQLi niet, maar doe je zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
class DBD
{
    protected $Connection;

    public function conn()
    {

        $this->Connection = new \MySQLi();
    }
}

?>
Gewijzigd op 18/05/2017 09:14:44 door Ward van der Put
 
Daniel van Seggelen

Daniel van Seggelen

18/05/2017 10:04:45
Quote Anchor link
Bedankt.

Het komt door de persoon en een krat bier, warom ik procedureel en object georienteerd had gemixed :)
Ik heb het aangepast en werkt aan :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
public $connection;
    public $lang = '';
    public function __construct()
    {
       parent::__construct(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME);
       $this->query("set names 'utf8'");
       $this->query("SET CHARACTER SET 'utf8'");
    }


Toevoeging op 18/05/2017 10:16:20:

Bedankt.

Het komt door de persoon en een krat bier, warom ik procedureel en object georienteerd had gemixed :)
Ik heb het aangepast en werkt naar:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
public $connection;
    public $lang = '';
    public function __construct()
    {
       parent::__construct(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME);
       $this->query("set names 'utf8'");
       $this->query("SET CHARACTER SET 'utf8'");
    }


Als ik de tweede optie gebrui; dus
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
protected $Connection;

    public function conn()
    {
        $this->Connection = new \MySQLi();
    }


zonder de extend, welke is dan sneller? De code van een ander script die ik aanpas is nu namelijk al zo gemaakt.
 
Thomas van den Heuvel

Thomas van den Heuvel

18/05/2017 19:35:02
Quote Anchor link
Vraag jezelf af wat voor meerwaarde jouw class heeft.

Mijn vorige reactie is nog steeds van toepassing. Gebruik set_charset() in plaats van bovenstaande constructie.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.