prepared statements ZONDER WHERE STATEMENT

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Implementations Manager - Netherlands

Implementation Manager - Netherlands Join us NOW and part of the great hospitality REVOLUTION! Our ideal candidate is a smart, articulate, outgoing individual who loves all things training & hospitality related. Preferably you will have gained experience in the hotel, travel and / or global distribution industry and you will be astigmatically transferring your knowledge to both internal and external clients. What should you be like? ● Ability to work in a fast-paced company, ready to work on your own or part of a team ● Highly structured and organized ● Ability to take feedback, learn and adapt to new

Bekijk vacature »

Traineeship tot softwareontwikkelaar. Go internati

Aan het begin van je .NET development carrière? Organisatie & Afdeling Voor een heel gaaf bedrijf, die gevestigd is door heel Nederland en internationaal actief is, zijn wij op zoek naar startende/ junior Microsoft developers die niet bang zijn om een grote uitdaging aan te gaan! Deze partij bestaat al meer dan 25 jaar, is opgericht door een nuchtere persoonlijkheid en gelooft in de kracht van de mensen. Overige kernwoorden waar deze partij veel waarde aan hecht zijn: realisatie, nuchterheid, vooruitgang, stabiliteit, pragmatisch en uitdaging. Over meerdere vestigingen in Europa werken er op dit moment meer dan 4.500 werknemers. Tegen

Bekijk vacature »

PHP Software Engineer Rotterdam Culturele branche

Wil jij werken binnen een innovatieve en creatieve werkomgeving? Lees dan snel verder! Voor een nieuwe businesspartner uit Rotterdam ben ik momenteel op zoek naar een Senior PHP Developer/ Engineer. Ik ben op zoek naar een open-minded programmeur wie het niet uitmaakt met welke framework hij/ zij aan de slag gaat. Dit bedrijf heeft een complex platform gebouwd waar 90 bedrijven uit de theaterbranche aan gekoppeld zijn. Zij zijn dan ook de marktleider binnen deze branche en bieden een totaaloplossing op het gebied van automatisering. Binnen deze flexibele organisatie heerst er een informeel sfeer en familiegevoel, hierdoor is het verloop

Bekijk vacature »

.NET C# ontwikkelaar gezocht (C#, Xamarin, Angular

.NET C# ontwikkelaar bij een slagvaardig en hard groeiend bedrijf met korte lijnen? In een omgeving waar je onder andere direct samen met de oprichter werkt aan het verder ontwikkelen van een vernieuwend product? Dan is deze vacature zeker iets voor jou. Voor een bedrijf in Rotterdam zijn we momenteel op zoek naar een .NET C# ontwikkelaar. Het gaat om klein bedrijf dat op een punt is aanbeland waar de vraag naar hun software flink aan het toenemen is. Hierdoor zijn ze op zoek naar meerdere .NET ontwikkelaars die samen met de oprichter en nog verschillende andere collega’s hun product

Bekijk vacature »

Senior Rapid Custom Software Developers

Jouw rol Voor deze ‘leading edge’ technology practice zijn we op zoek naar Senior Rapid Custom Software Developers. Echte IT-freaks die de ontwikkelingen in het vakgebied nauwkeurig volgen en weten wat er speelt. Die kunnen werken op de grens van het onmogelijke en zo onze nationale en internationale klanten een beslissende voorsprong geven in hun markt. Je adviseert over innovatie en werkt mee aan de agile ontwikkeling en implementatie van state-of-the-art oplossingen, gebaseerd op .Net, Java en/of Mendix. Het gaat vaak om nieuwe technieken, veel eindgebruikers en complexe omgevingen, waarin de lat hoog ligt. Snelheid en topkwaliteit zijn bij deze

Bekijk vacature »

IT: VMware virtualisatie infrastructuur specialist

VMware specialist bij de overheid Je blinkt uit in alles wat je doet. Je bent kundig en gedreven. Je bent nog lang niet klaar met leren want de techniek staat niet stil en jij al helemaal niet. “Ontwikkelen” is je middle name. Je weet wat je doet, hoe je het doet en dat wat je doet, doe je goed. Je wenst in de detachering te werken en bij de overheid te werken…dan zit je bij T2 op het goede adres! VMware specialist… Als VMware specialist begrijp jij allang waar wij het over hebben. Jij weet als geen ander wat de

Bekijk vacature »

Communicatief vaardige Senior PHP Developer met le

Met een compact een kundig team is men druk met maatwerkopdrachten voor onder andere de overheid en grote digitale aanbieders. Hoewel de overheid wellicht de laatste plek is waar je innovatie verwacht, is dit toch zeer zeker het geval. Hier is geen sprake van het herzien of uitbreiden van een eeuwenoud systeem, maar de creatie van een innovatief platform om “Henk & Ingrid” of liever “de normale burger” dichterbij overheids-gerelateerde beslissingen te brengen. Met de implementatie van zaken als spraakherkennings-software, het gebruik van technieken als Symfony2, Node.Js, React.Js en Angular.Js is dit project allerminst stoffig. Functie-omschrijving Samen met 2 collega

Bekijk vacature »

Full-Stack java developer in Utrecht

Functieomschrijving Wil jij werken voor een organisatie die werkt met de nieuwste technieken op het gebied van Java, een groot maatschappelijk belang heeft en een zeer diverse omgeving? Lees dan snel verder! Requirements ophalen bij klanten, veelal wetenschappers; Ontwikkelen van diverse Java applicaties; Onderzoek uitvoeren naar de nieuwste technieken; Schrijven van unit testen; Nauwe samenwerking tussen developers en beheerders en op termijn in DevOps teams; Circa 70% back-end ontwikkeling en 30% front-end ontwikkeling. Functie-eisen HBO/WO werk- en denkniveau; Een afgeronde studie in de richting van IT; Kennis van ontwikkelen in JavaScript, HTML/CSS, Angular en React; Ervaring in het ontwikkelen met

Bekijk vacature »

Gemotiveerde Senior PHP Developer (Symfony)

Organisatie Stel je voor; je schakelt binnen een van de meest toonaangevende organisaties binnen de zorg- en verzekeringsbranche. De informatie die feilloos door de zeer complexe applicaties stroomt die jij en je team elke dag weer perfectioneren is uiterst betrouwbaar. Jij bent dan ook een absolute PHP-held die zich kan vinden in het gezegde; ‘’onmogelijk bestaat niet, het kost alleen wat meer tijd’’. Je bekleed de rol van PHP developer binnen een team van absolute eindbazen op het gebied van software development. De producten en opdrachten zijn zeer divers, maar dat jij telkens weer diep in de code duikt verandert

Bekijk vacature »

Junior & medior Java programmeur voor dynamisc

Over wie heb ik het nu? Een informeel internetbureau in de buurt van Hengelo. Vanuit het moderne pand, goed gelegen via zowel de autowegen alsmede het openbaar vervoer focussen zij zich op het bedenken en creëren van online webapplicaties en overige web ontwikkeling. De doelgroep bestaat uit diverse commerciële organisaties, door actief mee te denken over de (on)mogelijkheden van het web kunnen zij de eindgebruikers optimale online ervaringen bieden. Het gaat hier om een jong dynamisch bedrijf met doorgroeimogelijkheden in de DevOps- en Test automatiseringskant. Bestaande uit zo’n 20 man waarvan de helft uit ontwikkelaars bestaat. Het is een hecht

Bekijk vacature »

Medior/Senior C# Developer ( Front-end/Web)

Medior/Senior C# Developer (Front-end/Web) in 's-Hertogenbosch Ben je een C# webdeveloper met gevoel voor UI en blink je uit in het spotten van verbeteringen? Lijkt het je een fantastische uitdaging om mee te werken aan het opzetten van een nieuw product? TRG Screen is een groeiend en innoverend softwarebedrijf van 120 professionals met klanten over de hele wereld. Onze klanten zijn bijvoorbeeld beurzen, banken en pensioenfondsen. Voor de ontwikkeling van onze webportal specifiek voor aandelenbeurzen hebben wij dringend behoefte aan een collega developer. Functieomschrijving Als lid van het INFOmatch development team ben jij de specialist op het gebied van webdevelopment,

Bekijk vacature »

Java Developer / Outsystems / Full Stack / lease-a

Vind jij het leuk om verantwoordelijk te zijn voor bedrijfkritische webapplicaties in een complexe omgeving? Werk je graag bij een grote organisatie met duizenden medewerkers? Functieomschrijving Vind jij het leuk om verantwoordelijk te zijn voor bedrijfkritische webapplicaties in een complexe omgeving? Werk je graag bij een grote organisatie met duizenden medewerkers? Reageer dan snel! Het ontwikkelen van software voor een juiste weergave van de bedrijfsprocessen (logistiek, sales, inkoop en financiën) in de bedrijfskritische webapplicaties (Java, Full Stack, Eclipse, Tomcat, SQL, HTML, CSS en Javascript) die zowel intern door collega's als extern door klanten worden gebruikt; Het ontwikkelen van het ERP-pakket

Bekijk vacature »

Junior (Fullstack) .NET developer gezocht nabij Am

Organisatie & Afdeling Voor een leuk en informele businesspartner, nabij Amersfoort, ben ik op zoek naar een junior developer die kennis heeft van HTML, CSS en Javascript en graag wilt doorgroeien naar een (Fullstack) .NET Developer! Deze organisatie is bijna 20 jaar uit, heeft meer dan 20.000 gebruikers van haar product en zijn op dit moment marktleider. Deze partij levert standaard SaaS-oplossingen die toegepast kunnen worden op verschillende typen organisaties. Wanneer de klant op zoek is naar software op maat, dan kan dat ook worden ontwikkeld en worden toegepast. Met grote klanten in hun portefeuille is hun doel om te

Bekijk vacature »

CMS developer / .NET developer / sitecore develope

Functieomschrijving Wil jij werken bij een gepassioneerd IT bedrijf die in de TOP 20 van beste werkgevers voorkomt? Wil jij Iedere dag met plezier aan de slag om de wereld een stukje slimmer, beter en veiliger te maken? Reageer dan snel, zodat we met elkaar in gesprek kunnen gaan over wat jij gaat betekenen voor de toekomst van Sitecore! Ontwikkelen van Front-end en back-end oplossingen; Maken van designs; Samen met de klant ga jij voor de best passende oplossing in Sitecore; Je adviseert de klant en fungeert als partner om samen tot de beste oplossing te komen; O.b.v. Sitecore bouw

Bekijk vacature »

.NET Ontwikkelaar gezocht voor een functie in de e

Samen met de 7 developers in Nederland en jullie Ethiopische collega zijn jullie verantwoordelijk voor de software-tak van de grote olie producenten. Naast de kwaliteit die jullie leveren, maak je het ook zo gebruiksvriendelijk mogelijk. Dit levert op de lange termijn een grote klanttevredenheid en dus meer gebruikers op. Functie-omschrijving Naast het coderen houd jij je ook bezig met: – Implementeren van nieuwe features – Optimaliseren Mocht je de interesse hebben om een stap verder te gaan, dan zijn jouw werkzaamheden ook: – Het onderhouden van klantcontacten – Internationale bezoekjes aan de partners (zowel in de fabrieken als op de

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

17/12/2018 21:41:40
 
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.