prepared statements ZONDER WHERE STATEMENT

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior C# .Net Developer

Medior C# .Net Developer Je komt te werken in een gezellig en informele scrumteam en bouwt mee aan de ontwikkeling van een nieuwe applicatie voor groothandelaren in de bloemen- en plantenbranche. Hierbij krijg je de mogelijkheid jezelf te ontwikkelen in de richting jij wilt! Front end, back end of full stack. Wijvragen van jou… Ervaring in ontwikkelen van applicaties m.b.v. C# Teamplayer met goede communicatieve vaardigheden Een pro-actieve werkhouding De eigenschappen zelfstandig, nauwkeurig en gestructureerd HBO werk- en denkniveau Wat bieden wij… Een fulltime functie (32-40 uur) Een marktconform salaris afhankelijk van kennis en ervaring Een 13e maand en reiskostenvergoeding

Bekijk vacature »

Developer: C# / ASP.NET / Azure / VR / Hololens /

Functieomschrijving Werk je graag aan innovatieve projecten zoals Azure, Hololens, AI en VR? Wil je werken met C#, ASP.NET, MVC, webservices, Python, Angular, React.js, Ember.js, HTML en CSS? Reageer dan nu op deze vacature in regio Heerlen! Het ontwikkelen van nieuwe functionaliteiten op het gebied van een diversiteit aan software (zowel front-end als back-end) voor externe klanten middels C#, ASP.NET, MVC, webservices, Azure, Python, Angular, React.js, Ember.js, HTML, CSS, VR, AI en Hololens; Deelnemen en uitvoeren van innovatieve projecten; Het bezoeken van klanten in Nederland, Duitsland en België; Het uitvoeren van unittests; Het werken volgens de Agile/SCRUM methodiek; Het deelnemen

Bekijk vacature »

Puppet Developer

Deel jij onze visie dat de toekomst van IT ligt in de software, integratie, automatisering en eenvoud? Wil je net als wij af van het denken in infrastructuur en software apart? Lees dan verder! Dit ga je doen Als Puppet Developer bij Itility lever je technische expertise in Puppet implementaties bij internationale enterprise klanten en binnen de Itility inhouse projecten. Dit is je uitdaging: vertalen van business requirements naar design en implementatie van Puppet profiles, manifests en modules ontwikkelen van Puppet manifests en modules in onze DevOps teams leveren van bijdragen aan het ontwikkelen van standaards en richtlijnen voor het

Bekijk vacature »

.NET Developer Eigen Software 3.000 - 4.100

Functieomschrijving NET Developer ICT 3.000 - 4.100 .NET Developer Voor de vacature als .NET Developer Amstelveen ICT ga je het volgende doen: Als .NET Developer heb je de verantwoordelijkheid voor het ontwerpen en ontwikkelen van de fundamentele architectuur die bedrijfsactiviteiten ondersteunen. Je creëert en ontwikkelt testbare API's en services die worden gebruikt door het web, mobiele en desktop klanten. Je werkt in een omgeving die cloud services uitbuit. Je werkt samen in een team om de specificatie-eisen vast te stellen, analyses, engineering en planning uit te voeren. Je onderzoekt en geeft verbeterpunten op het gebied van architectuurontwerp. Ter versterking van

Bekijk vacature »

.NET API developer Ernem Azure devops

Functieomschrijving Je wordt als .NET developer onderdeel van een goed lopend Scrumteam en gaat samen aan de slag om het SAAS aangeboden product verder te verbeteren en uit te breiden. Onze klant loopt graag, maar vooral bewust, voorop met nieuwe technieken. Dus naast het ontwikkelen van nieuwe functionaliteiten ga je ook pionieren met nieuwe technieken. Naast Scrum en Azure is onze klant fervent voorstander van devops! Meer weten? Neem dan contact op via kjell@careervalue.nl of bel 0657578548 Functie-eisen - Je hebt HBO werk en denk niveau - Je hebt ervaring met C#, API's, Azure, - Je hebt kennis van HTML5,

Bekijk vacature »

Pega Developer - 5 Months - Tilburg, NL

Global Enterprise Partners is currently seeking a CSSA Certified Pega developer to join a 5 month project with a client of ours in Tilburg, the Netherlands. For this project we are looking for a Pega developer with the following skillset; 3+ Years' Pega development experience Pega CSSA Certified Integration experience Good communication skills Fluent in English, Dutch a plus Project Details Start Date: 01/02/2019 End Date: 01/07/2019 Location: Tilburg, NL Workload: 36 hours Rate: Let me know your rate Does this SAP TM role fit your profile? If so, please send over your updated CV, rate and availability to a.doyle(a)globalenterprisepartners.com

Bekijk vacature »

Oracle Middleware Developer

Wat je gaat doen: Wij zijn op zoek naar een Oracle Middleware Developer met kennis van/ervaring met onder andere SOA Suite 10G en/of SOA Suite 11G, WebLogic, BPEL Orchestration, Java, SOAP. Je bent bekend met de integratie laag gebaseerd op Oracle SOA Suite 10G. Als Middleware developer ben je verantwoordelijk voor de ontwikkeling van integratie tussen de diverse applicaties in het landschap, en de communicatie tussen de klant en andere stakeholders. Je werkt samen met het applicatie team, zoals functioneel ontwerpers en andere ontwikkelaars om de oplossing verder te ontwikkelen en te implementeren. Je collega’s werken onder andere met technieken

Bekijk vacature »

Junior Java Developer

Werken met de meest innovatieve technieken en afwisselende projecten? Wil je leren door constant uitgedaagd te worden, om vernieuwend te zijn en buiten de kaders te denken? Ben jij geïnteresseerd in disruptive technieken zoals Artificial Intelligence? Dan ben je op de goede plek beland! Als Java Developer ben je betrokken bij de full life cycle van development en breng je complexe projecten tot een succesvol einde. De looptijd van de projecten varieert tussen de twee maanden tot een jaar. Je werkt op locatie bij de klant in principe in vaste teams, maar om jezelf te blijven ontwikkelen wordt regelmatig gerouleerd

Bekijk vacature »

Gezocht: Senior Frontend Developer, interne functi

Functieomschrijving Zoals hierboven ook al genoemd kom je terecht in een team van 12 Developers. Er is heel veel kennis in huis en deze kennis wordt actief gedeeld, zodat iedereen ervan kan profiteren. Dit blijkt ook wel uit het feit dat er 36 kennissessies per jaar worden georganiseerd (waarbij je heus niet altijd aanwezig hoeft te zijn) met als doel iedereen optimaal van elkaars kennis te laten profiteren. Er heerst een echte 'helpcultuur'. Jouw collega's zijn stuk voor stuk hardwerkende en gemotiveerde Software Developers, die heel trots zijn op de producten die zij opleveren. Jij zal als Frontend Javascript Developer

Bekijk vacature »

C# developer

C# developer koppelingen en uitbreidingen ERP en Document Management Software Locatie Op kantoor in Nijmegen, vanuit huis, bereidheid om incidenteel op locatie van de klant complexe applicaties live te zetten of support te verlenen hierop Contactpersoon Roel Kavelaar rkavelaarATsearch-consult.nl ph:0243528815 ph:0644949337 Organisatie Organisatie ondersteunt haar klanten door maatwerk koppelingen en uitbreidingen te bouwen op ERP en Document Management systemen. Hiervoor wordt gebruik gemaakt van eigen software maar ook van bestaande apps en plugins. Er wordt gewerkt met Visual Studio .NET in C# en SQL Server. Verantwoordelijk voor Programmeren van koppelingen in ERP en Document Management Systemen Programmeren van uitbreidingen op

Bekijk vacature »

iOS Developer

Je bent innovatief. Je bent creatief. Jij gaat voor een topbaan. Aan de slag als iOS-professional Mobile apps ontwerpen, uitwerken en realiseren, dat is jouw passie! Met grote toewijding richt jij je dan ook op een app waarmee consumenten met een gezichtsscan betalen. Of je stort je je op een app die de temperatuur in huis op afstand kan regelen. Het spreekt voor zich dat jouw apps top of the bill zijn als het gaat om gebruiksvriendelijkheid en veiligheid. Ze hebben impact. Je voelt je als een vis in het water in een iOS-omgeving maar, veelzijdig als je bent, kun

Bekijk vacature »

Front-end developer

Bij Airtrade is het heel goed toeven Zodra je ons kantoor in Haarlem binnenwandelt komt de dynamische vibe je direct tegemoet. De geur van verse cappuccino (ja, met échte melk) leidt je via onze goed gevulde pantry naar de ontmoetingsruimte, waar je een praatje maakt met een developer en een IATA-specialist. Ondertussen beginnen je collega's verderop met het eerste potje Mario Kart. Aangekomen bij je werkplek zie je ‘studiereis verloting onder medewerkers’ in je inbox verschijnen. Jij denkt: meedoen! Dit kan ook jouw leven zijn. Bij Airtrade inspireren we onze medewerkers graag; met een fijne werkplek en enthousiaste collega's én

Bekijk vacature »

Medior Java Developer / Financiële sector / R

Functieomschrijving Ben jij een Medior Java Developer, daagt een dynamische omgeving jou uit en bouw je graag innovatieve oplossingen? Werk je graag in de financiele sector en in een familiaire omgeving waar groei centraal staat? Lees dan snel verder! Het ontwikkelen van financiële applicaties in Java o.b.v. microservices architectuur; Software ontwikkelen specifiek voor het AWS platform om het maximale uit Amazon Webservices te halen; Werken aan een zeer veeleisende omgeving en continu veranderende applicaties; Het werken in een multidisciplinair team dat continu werk oplevert middels CI/CD; Deelnemen aan designsessies; Het schrijven van diverse automatische tests; Op de hoogte blijven van

Bekijk vacature »

.NET back-end developer

Voor een eindklant in Utrecht ben ik op zoek naar een senior .NET developer. Je zal voornamelijk werken aan de back-end van interne applicaties binnen een enterprise omgeving. Daarnaast is het belangrijk dat je in contact kan staan met de business. Technieken: - C# - ASP.NET (MVC) - DDD - Azure - Azure DevOps - SQL server - Entity framework - Unit testing Bij interesse kom ik graag met je in contact.

Bekijk vacature »

.NET Developer/Consultant gezocht voor security vr

Functieomschrijving Wil jij een combinatie van complexe security projecten, klanten adviseren en dat terwijl je 2 dagen per week thuis kan werken? Lees dan nu verder! Functionele requirements vertalen naar technische oplossingen en deze zelf ontwikkelen; Klanten pro-actief adviseren over innovatieve software-oplossingen; Adviseren en ontwikkelen in lijn met de strategie en doelen van de klant; Technische ontwerpen opstellen; Begeleiden van ingebruikname van het product. Functie-eisen Afgeronde HBO/WO opleiding richting bijvoorbeeld Informatica is een sterke pré; Enkele relevante certificeringen; Aantoonbare werkervaring als developer, en hebt hierbij bovenmatige interesse in security vraagstukken; Ervaring als consultant is geen eis, wel is het prettig

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

22/02/2019 14:33:09
 
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.