prepared statements ZONDER WHERE STATEMENT

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior .Net developer met interesse in duurzaamhei

Functieomschrijving Binnen jouw rol als backend .Net ontwikkelaar speel je een grote rol in de toekomst van dit bedrijf. Het ontwikkelen van op de markt te brengen nieuwe producten, het up-to-date houden van de bestaande producten en nadenken over nieuwe innovaties zijn kerntaken die bij je functie als Senior C# ontwikkelaar horen. Ook zullen de wat minder ervaren collega's bij je aankloppen als ze technische vragen hebben. Jouw invloed op het team, de software en de organisatie zal dus groot zijn! In het ontwikkelteam zal jij een echte backend developer worden, dit houdt in dat je voornamelijk met C# .Net,

Bekijk vacature »

Fullstack C# developer gezocht, eigen product, inh

Ben je een C# developer en op zoek naar een nieuwe baan? Waar je naast C# en .NET Core ook werkt met (web)technieken als WebAPI, Angular en Xamarin? Waar je je kunt focussen op het maken van een eigen product en er ruimte is voor het leveren van kwaliteit? Nieuwsgierig? Lees dan verder! Voor een bedrijf in Alblasserdam zijn we momenteel op zoek naar een fullstack C# developer. Het gaat hier om een jong en stabiel bedrijf welke een online platform ontwikkeld heeft die complementair zijn aan de IoT apparatuur die ze reeds verkopen. Inmiddels wordt het platform wereldwijd verkocht,

Bekijk vacature »

.NET C# developer gezocht, Dordrecht

Ben je een .NET C# developer die in Dordrecht woont, of in de omgeving hiervan, en op zoek is naar een nieuwe baan? Bij een bedrijf met betrokken collega’s, die elkaar graag helpen, binnen een informele cultuur? En aan een succesvol product wilt werken dat constant verder ontwikkeld wordt? Voor een bedrijf in Dordrecht zijn we op zoek naar verschillende C# developers. Het bedrijf richt zich op de ontwikkeling van software voor een specifieke branche en heeft circa 5000 gebruikers. De organisatie bestaat uit circa 20 mensen waarvan 6 .NET developers, 1 architect en 3 software testers. Het werk bestaat

Bekijk vacature »

Junior Integratie Specialist

Ben jij net afgestudeerd en op zoek naar een startersfunctie? Heb je affiniteit met zorg en ICT en ben je analytisch sterk? Dan zijn wij voor onze vestiging in Amsterdam op zoek naar jou! Als Junior Integratie Specialist zorg jij dat de systemen en apparatuur van externe leveranciers en instanties naadloos communiceren met ons ZIS/EPD (zorginformatiesysteem/elektronisch patiëntendossier). Jij helpt ChipSoft met het bouwen aan duurzame informatie-uitwisseling in de zorg. Jouw baan Informatie-uitwisseling in de zorg is essentieel om de patiëntzorg te verbeteren. Als Junior Integratie Specialist ondersteun en adviseer jij de klant (veelal ziekenhuizen) om een perfecte communicatie tussen de

Bekijk vacature »

C# backend developer, Rotterdam

Voor een grote organisatie in Rotterdam zijn we op zoek naar iemand met ruime ervaring in het ontwikkelen van applicaties in .NET C#. Het gaat hier om een organisatie met een maatschappelijke impact. Hun systemen zijn gericht op een groot aantal klanten waarbij het belangrijk is dat de applicaties helder, toegankelijk en up-to-date zijn. Als .NET C# developer werk je aan uiteenlopende applicaties, APIs en het interne framework. Dit doe je binnen een SCRUM team en meedenkt binnen het hele proces. Het team bestaat uit meerdere C# developers variërend van medior tot senior. Er is dus veel kennis en ervaring

Bekijk vacature »

Experienced SAP HANA / BW Developer

Intro Would you like to join a company who is active in the high-tech industry and work on high-end software in the Brainport region of Eindhoven? For our client I am looking for an experienced SAP HANA / BW Developer. About our client Our client creates the conditions that enable you to realize your full potential. They provide state-of-the-art facilities, opportunities to develop your talents, international career opportunities, a stimulating and inspiring environment, and most of all, the commitment of a company that recognizes and rewards outstanding performance. Job description The ICT infrastructure, hardware and applications are absolutely mission-critical for

Bekijk vacature »

Senior Front-end Developer vacature

Senior Front-end Developer Jij weet wat er nodig is. Jouw hart gaat sneller kloppen van techniek. Jij wil vooruit. Je bent creatief, thuis in gebruikersinteractie en een Developer in hart en nieren. Daarnaast heb jij een klantgerichte en initiatiefrijke houding. Precies de kwaliteiten die een Front-end Developer nodig heeft. Wat doe jij als developer bij Sogeti? Als Front-end Developer werk je aan de technische realisatie van front-end (web)applicaties in de verschillende opdrachten voor Sogeti’s klanten. Dit kan zowel op klantlocatie, als intern bij Sogeti. Jij houdt van het uitdenken en implementeren van responsive (web) apps, en zet hiervoor jouw uitgebreide

Bekijk vacature »

Mendix Developer (Lead)

Wil jij als de lead Mendix developer jouw technische skills toepassen bij diverse opdrachtgevers? Wil jij samen met de managers en de directie de Mendix tak naar een hoger level tillen? Dan is dit de uitdaging die bij jou past! Organisatie Onze relatie helpt diverse organisaties, van start-ups tot grote multinationals. Hun business focus bestaat uit verschillende bedrijven die allemaal bezig zijn met een digitale transformatie. De wereld verandert snel en onze relatie laat dat duidelijk zien aan de klanten. Zij lopen voor op de technieken en de methodes die door vele klanten gewild zijn. Dit doen zij op continue

Bekijk vacature »

Full Stack Developer

Heb jij skills in o.a. PHP7 & ES6 en ben je op zoek naar een nieuwe werkgever? Misschien zijn wij dan deJouwe! deJouwe is een jong, dynamisch bedrijf en brengen iedere muur tot leven met unieke, zelf te personaliseren, fotoproducten. Ons totaalpakket is er niet alleen op gericht om foto’s op een mooi materiaal te printen; wij helpen klanten de mooiste wanddecoraties te creëren. Dit doen wij met een team van tien ondernemende mensen, elk met onze eigen expertise. Wij zijn aan het groeien. Daarom zijn we op korte termijn op zoek naar een ervaren, creatieve Full Stack Developer met

Bekijk vacature »

SQL Developer / BI / Miljoenen eindgebruikers

Functieomschrijving Altijd al aan de slag willen gaan als Senior SQL Developer bij één van de meest vooraanstaande verzekeraars in Nederland? Wil jij je richten op het bedenken, ontwerpen, bouwen en implementeren van uiteenlopende BI oplossingen vanuit data van miljoenen gebruikers met de Microsoft BI Stack, T-SQL, PowerShell en Datawarehousing? Lees dan nu verder! Analyseren, ontwerpen, ontwikkelen en documenteren van BI oplossingen en complexe BI applicaties (met tools als T-SQL, PowerShell, SAS, SSIS, BIML BODS en BOXI) Maken van technische ontwerpen, data analyses en adviseren over de datawarehouse; Ontwerpen van functionele specificaties voor de dashboards en rapportages; Schakelen met stakeholders

Bekijk vacature »

Back-end PHP Developer / Maatschappelijk betrokken

Functieomschrijving Ben jij een developer die de volgende stap in zijn carrière wilt maken? Wijk jij niet uit voor precisie werk in een open en informele omgeving? Lees dan snel verder en reageer! Her- en uitbouwen van het inhouse softwareplatform dmv PHP; Onderhouden van bovengenoemd platform in PHP; Sparren met het team; Meedenken over nieuwe functionaliteiten, security etc; Jouw input leveren aan het proces door op de hoogte te blijven van nieuwe ontwikkelingen etc. Functie-eisen Afgeronde HBO of WO opleiding, liefst in de richting van Informatica; Je hebt minimaal 3 jaar ervaring als PHP Developer; Je hebt ervaring met object

Bekijk vacature »

C# backend developer gezocht, hardware component,

Ben je een C# developer en zoek je een baan in Rotterdam waar je systemen ontwikkeld die communiceren met hardware? Bij een klein bedrijf met korte lijnen, een open cultuur en veel vrijheid? Wellicht dat dit dan iets voor je is. Voor een klant in Rotterdam zijn we op zoek naar een ervaren C# developer. Het gaat hier om een bedrijf dat gericht is om voor overheden en ondernemingen informatie vanuit bepaalde meetsystemen te verwerken en te presenteren. Zo is bijvoorbeeld een van de projecten waar je als ontwikkelaar aan gaat werken; het bouwen van een website waar gebruikers informatie

Bekijk vacature »

Senior Front-end Developer vacature

Senior Front-end Developer Jij weet wat er nodig is. Jouw hart gaat sneller kloppen van techniek. Jij wil vooruit. Je bent creatief, thuis in gebruikersinteractie en een Developer in hart en nieren. Daarnaast heb jij een klantgerichte en initiatiefrijke houding. Precies de kwaliteiten die een Front-end Developer nodig heeft. Wat doe jij als developer bij Sogeti? Als Front-end Developer werk je aan de technische realisatie van front-end (web)applicaties in de verschillende opdrachten voor Sogeti’s klanten. Dit kan zowel op klantlocatie, als intern bij Sogeti. Jij houdt van het uitdenken en implementeren van responsive (web) apps, en zet hiervoor jouw uitgebreide

Bekijk vacature »

Technisch Ontwerper / Applicatie Ontwikkelaar

Technisch Ontwerper / Applicatie Ontwikkelaar Actief Wat ga je doen? Als Technisch Ontwerper / Applicatie Ontwikkelaar kom je te werken bij onze gerenommeerde klanten op projecten of opdrachten van omvang en formaat. Je bent verantwoordelijk voor het omzetten van functionele specificaties naar een technisch ontwerp, het ontwerp van programmaspecificaties voor toepassingen, de realisatie van (gewijzigde) programmaonderdelen en databestanden van toepassingen en de technische systeemtest van applicatietoepassingen. Daarnaast geef je vorm aan webpagina’s en applicaties, stel je gebruikersdocumentatie op en verleen je ondersteuning bij het oplossen van productiefouten. Tevens ben je verantwoordelijk voor het samenstellen en onderhouden van de applicatie c.q.

Bekijk vacature »

Technisch Ontwerper / Applicatie Ontwikkelaar

Technisch Ontwerper / Applicatie Ontwikkelaar Actief Wat ga je doen? Als Technisch Ontwerper / Applicatie Ontwikkelaar kom je te werken bij onze gerenommeerde klanten op projecten of opdrachten van omvang en formaat. Je bent verantwoordelijk voor het omzetten van functionele specificaties naar een technisch ontwerp, het ontwerp van programmaspecificaties voor toepassingen, de realisatie van (gewijzigde) programmaonderdelen en databestanden van toepassingen en de technische systeemtest van applicatietoepassingen. Daarnaast geef je vorm aan webpagina’s en applicaties, stel je gebruikersdocumentatie op en verleen je ondersteuning bij het oplossen van productiefouten. Tevens ben je verantwoordelijk voor het samenstellen en onderhouden van de applicatie c.q.

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

05/07/2020 08:01:12
 
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.