Vreemde mysqli-bug?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

Database ontwikkelaar

Functieomschrijving Wil jij aan gave logistieke softwareprojecten werken en bij een uniek softwarebedrijf in de regio van Tilburg? Wacht niet langer en reageer snel op deze vacature. Als Database ontwikkelaar ga je aan de slag het schrijven van stored procedures en verder uitbouwen van de SQL database. Je werkt in een database team, met allemaal mensen die energie krijgen van software en techniek. Verder krijg je als taak: Optimaliseren en uitbouwen van de MS SQL databases die gebruikt worden; Optimaliseren van query's, waardoor er efficiënter gewerkt kan worden; Je werkt met de technieken T-SQL of PL/SQL; Bij interesse kan je

Bekijk vacature »

Oracle APEX Ontwikkelaar (3.500-6.000 euro)

Bedrijfsomschrijving Ben jij een getalenteerde Oracle APEX ontwikkelaar met minimaal één jaar ervaring in het ontwikkelen van Oracle APEX-applicaties? Ben je gepassioneerd over het ontwikkelen van bedrijfskritische oplossingen en wil je werken bij een toonaangevend consultancybedrijf? Dan zijn wij op zoek naar jou! Deze organisatie beschikt over zowel inhouse als externe projecten, maar bovenal over een sterk team en netwerk van opdrachten waardoor jij jezelf verder kunt ontwikkelen. Het team bestaat uit een aantal junior en medior developers, maar vooral uit senioren. De business unit managers binnen het team zijn mensen die hun vak verstaan en zelf als Oracle APEX

Bekijk vacature »

PHP ontwikkelaar

Functie Jij komt te werken in een development team van 9 man. Het grootste deel doet back end development en daarnaast is er 1 teamlead en 1 tester in het team. Dit Agile team is van groots belang voor de organisatie omdat zij voornamelijk alle eigen systemen in-house ontwikkelen. Naast het door ontwikkelen van het bestaande platform en de software die daarbij komt kijken, zul jij je ook bezighouden met het realiseren en opzetten van nieuwe projecten binnen het bedrijf. Je staat nauw met de klant in contact om zo hun wensen zo goed mogelijk te kunnen realiseren. Daarnaast ontwikkel

Bekijk vacature »

Technical Asset Specialist Substations

TenneT is growing fast to realize its strategic ambitions. We play a leading role in driving the energy transition. We are looking for a passionate Technical Asset Specialist for substations (onshore and offshore) at our location in Arnhem who will contribute to this and that might be you? Your contribution to TenneT We are searching for a motivated and engaged colleague as a technical asset specialist (onshore and offshore) for instrument transformers and surge arresters, with preferably a strong background in the area of insulation coordination. As a specialist for insulation coordination you are responsible for overarching topics regarding insultation

Bekijk vacature »

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Integratie Developer / Architect

Dit ga je doen Als Integratie Developer / Architect binnen deze organisatie krijg je echt de kans om impact te maken. De organisatie is groeiende maar houdt een corporate cultuur buiten de deur. Heb je een goede business case: zorg voor goede argumentatie en ga ervoor! Geen stroperig beslissingsproces dat jouw ideeën in de weg staat! Enkele van jouw taken: Je ontwerpt en ontwikkelt nieuwe integraties met behulp van interne tools (Boomi) of externe partners; Je vertaalt functionele specificaties naar technische oplossingen; Je denkt mee over strategische ontwikkelingen op het gebied van applicatie integratie; Je voert regie op leveranciers en

Bekijk vacature »

Junior Front end developer

Functie Als Front end developer binnen onze organisatie ga jij je bezig houden met het bouwen van de user experience van de webapplicaties. Je bent verantwoordelijk voor het vertalen van concepten, briefings en designs naar werkende functionaliteit. Hierbij zorg je ervoor dat applicaties betrouwbaar, veilig en toekomstbestendig zijn en een goede architectuur hebben en behouden. Verder denk je actief na- en mee over nieuwe ontwikkelingen en functionaliteiten om zo elke dag de klantervaring weer te verbeteren. Dit doe je natuurlijk niet alleen maar in een development team. Het team bedraagt momenteel 4 man bestaande uit 2 devops engineers en 2

Bekijk vacature »

.NET Developer

Functie omschrijving Ben jij een senior .NET developer en heb jij tevens ervaring als teamlead? Ben jij iemand met een helikopterview en denk jij graag mee met de klanten? Dan zijn wij op zoek naar jou! Voor een geweldig bedrijf zijn wij namelijk op zoek naar een ervaren .NET developer. Het bedrijf houdt zich bezig met het ontwerpen en bouwen van websites, portalen en applicaties voor met name zorg- en onderwijsinstellingen en overheidsinstanties. Jouw taken: Het fungeren als Lead Developer; Het meedenken met de business (dit vergt commercieel inzicht); Het begeleiden van diverse projecten (van klein tot groot); Het ontwerpen

Bekijk vacature »

Junior/medior Back end developer PHP, Laravel

Functie Jij als ontwikkelaar komt te werken in een team bestaande uit 4 back end programmeurs, 2 vormgevers/ Front end developers en een online marketeer. Qua persoonlijkheden is het team erg gevarieerd van sportfanaten tot gameliefhebbers en Golfers. Een ding heeft iedereen hier gemeen; Passie voor goede code. In jouw rol zul je voor veel van je tijd je bezig houden met het ontwikkelen van maatwerk features en applicaties. Daarnaast hebben wij op aanvraag ook wel eens een website of onderhoudsklusje, die opgepakt moet worden en hier ben jij ook niet vies van. Jij als full stack developer zult dus

Bekijk vacature »

C#.NET ontwikkelaar

Functieomschrijving Voor een gewaardeerde werkgever in regio Tilburg zijn wij op zoek naar een C#.NET ontwikkelaar. Je bent verantwoordelijk voor het ontwikkelen van dashboards, webapplicaties en apps voor de eigen IOT-oplossingen. Samen met een vooruitstrevend team van ontwikkelaars en engineers krijgen jullie de opdracht om de sensoren in de apparatuur te scannen en vervolgens de data om te zetten in belangrijke inzichten voor de klanten. Taken en verantwoordelijkheden: Heb jij ideeën over nieuwe technieken die jullie kunnen implementeren? Hier wordt echt naar je geluisterd en gekeken of jouw idee daadwerkelijk ingezet kan worden; Je gaat aan de slag met de

Bekijk vacature »

Back end developer PHP

Functie Met een complex en uitgebreid e-commerce platform, een eigen PIM-systeem en eigen scan applicatie – krijg jij dagelijks te zien hoe jouw werk gebruikt wordt door miljoenen gebruikers. En we staan qua development pas in de startblokken, aangezien er nog meerdere projecten op de plank liggen te wachten! Ons huidige development team bestaat uit 8 programmeurs. Er wordt dagelijks gereflecteerd op geschreven code, Scrum taken en kennisdelen onderling is een must. Onze voertaal binnen ons team is Engels, dit omdat wij twee internationale collega’s hebben. Ons huidige “IT Landschap” bestaat voornamelijk uit allerlei losse onderdelen die individueel, maar ook

Bekijk vacature »

C# .NET Developer

Dit ga je doen Je richt je op het doorontwikkelen en herstructureren van het platform; Je werkt in teamverband en zelfstandig aan uitdagende projecten voor verschillende klanten; Softwareontwikkeling middels C# .NET; Je staat in contact met verschillende opdrachtgevers om de klantwensen te bespreken en deze vervolgens te ontwikkelen; Verbeteren van bedrijfsprocessen; Implementaties. Hier ga je werken Als .NET Developer kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet

Bekijk vacature »

C#.NET Developer

Functieomschrijving Voor een software ontwikkelaar in de omgeving van Vught zijn we op zoek naar een gemotiveerde C# ontwikkelaar. Deel jij hun passie voor development en dan vooral in C#.NET? Dan kan dit wel eens jouw droombaan zijn! Jouw werkzaamheden zullen er ongeveer als volgt uit gaan zien Door de wensen van de klant goed te begrijpen ga jij aan de slag dit om te zetten naar passende oplossingen en werk je deze uit tot een sterk eindproduct. Je gaat je bezighouden met de ontwikkeling van webapplicaties en websites, dit doe je door middel van ASP.NET, MVC Frameworks en C#.

Bekijk vacature »
Arjan van Rijs

Arjan van Rijs

11/10/2013 20:07:07
Quote Anchor link
Beste allemaal,

ik ben nieuw hier, dus ik zal me eerst kort voorstellen: Ik ben Arjan. Ik beheer vanaf 2006 een schrijfforum en heb me in eerste instantie verdiept in php omdat ik dat handig vond voor de beheerstaken. Van het een kwam het ander en voor ik het wist stond mijn boekenkast vol met boeken over php, mysql, sql, xhtml, xml, javascript en ajax. Je zou kunnen zeggen dat ik het virus te pakken heb.
In het dagelijks leven verdien ik de kost als chauffeur bij SANDD (postbedrijf) en heb ik een eigen hoveniersbedrijf. Voor diegenen die geïnteresseerd zijn, kijk gerust eens rond op mijn site. Het stelt nog niet zoveel voor, maar ik ben druk bezig een webapplicatie te ontwikkelen waarin ik al mijn huidige kennis kan gebruiken...

en dat brengt me bij de vraag die ik heb.
Ik heb een databasepakket ontworpen en ben dat nu aan het testen, maar heb last van een hele vreemde bug. Ik hoop eigenlijk dat iemand hier weet waar die bug vandaan komt.
Het probleem is het volgende:
bij een geslaagde SELECT-query zou mysqli_query een mysqli_result-object terug moeten geven. Maar ik krijg TRUE terug. Weet iemand hoe dit kan? (dezelfde query geknipt uit het resultaat en geplakt in phpmyadmin geeft keurig het gewenste resultaat en een met opzet foute query geeft FALSE)

Het enige dat ik kan bedenken is dat de functie mysqli_query test of het met een objectinstantie van doen heeft en als dit zo is TRUE teruggeeft (er vanuit gaande dat het een mysqli-objectinstantie is), maar dat zou slordig zijn, toch?

Met viendelijke groet,

Arjan.
 
PHP hulp

PHP hulp

26/05/2026 15:11:46
 
Erwin H

Erwin H

11/10/2013 20:14:07
Quote Anchor link
Waarom is het altijd meteen een bug als iets niet werkt? 99 van de 100 keer ligt het eerder aan de scripter, dan de standaard functies die uit en te na zijn getest namelijk....

Maar ja, zonder ook maar enige code kan niemand iets voor je doen, dus laat eerst eens zien wat je probeert te doen en dan voornamelijk, welke query probeer je te draaien?
 
Arjan van Rijs

Arjan van Rijs

11/10/2013 20:32:47
Quote Anchor link
Beste Erwin,

geloof me als ik zeg dat ik de fout altijd eerst bij mezelf zoek, vervolgens bij mijn ogen en dan nog eens in mijn arm knijp om er zeker van te zijn dat ik niet zelf zit te slapen. Dezelfde routine die deze query afhandelt (bij debuggen altijd zo eenvoudig mogelijk dus SELECT * FROM namen) handelt ook de insert, update en delete querys af, en die gaan prima. Maar goed, de code:

$item = "*";
$tabel = "namen";
$controle = $vraag -> query(1, $tabel, $item);

wordt verwerkt door de methode query die na een hoop bewerkingen uitkomt bij:

if($querystring) {
$resultaatId = mysqli_query($this -> handler, $querystring);
switch($resultaatId){
case TRUE:
$this -> affectedRows = mysqli_affected_rows($this -> handler);
if($gevalideerdeBewerking == "INSERT"){
$this -> insertId = mysqli_insert_id($this -> handler);
}
return TRUE;
break;

case FALSE:
$fout = mysqli_error($this -> handler);
$this -> foutmelding = "Fout bij het uitvoeren van de query.<br />MySqli fout: $fout";
return FALSE;
break;

default:
if(is_object($resultaatId)){
$this -> numRows = mysqli_num_rows($resultaatId);
$resultaat = mysqli_fetch_array($resultaatId, MYSQLI_BOTH);
if($this -> store === TRUE){
parent::$resultHandler++;
parent::$archief[parent::$resultHandler] = $resultaat;
}else{
return $resultaat;
}
}else{
$this -> foutmelding = "Er is een onvoorziene fout opgetreden bij het verwerken van uw query<br />";
return FALSE;
}
}
}else{
return FALSE;
}

ik hoop dat dit meer duidelijkheid biedt.

Met vriendelijke groet,

Arjan.

edit: ik vergeet erbij te zeggen dat ik de querystring die terugkomt eerst echo en dat ik die heb geknipt en geplakt als bedoeld in mij eerste post.
Gewijzigd op 11/10/2013 20:37:15 door Arjan van Rijs
 
Frank Nietbelangrijk

Frank Nietbelangrijk

11/10/2013 20:40:28
Quote Anchor link
Welke PHP versie?
 
Arjan van Rijs

Arjan van Rijs

11/10/2013 20:43:18
Quote Anchor link
Net ge-update naar 5.5
 
Erwin H

Erwin H

11/10/2013 23:33:04
Quote Anchor link
Precies....

Als jij dus zegt 'Maar ik krijg TRUE terug.' dan concludeer je dat uit het feit dat de true case in je switch uitgevoerd wordt. Je hebt het NIET getest door even een simpele debug te doen, bijvoorbeeld door eens je $resultaatId te echoen na het uitvoeren van je query. Had je dan namelijk wel gedaan, dan had je gezien dat daar wel een resource in zit ne het dus helemaal niets te maken heeft met 'een bug in mysqli'.

Het probleem hier, is een verkeerd gebruik van het switch statement. Uit de manual (http://www.php.net/manual/en/control-structures.switch.php):
Quote:
The case expression may be any expression that evaluates to a simple type, that is, integer or floating-point numbers and strings. Arrays or objects cannot be used here unless they are dereferenced to a simple type.

Je kan het switch statement dus helemaal niet gebruiken, want als het een resource is (wat het zou moeten zijn), dan kan dat niet correct geevalueerd worden en wordt, standaard, de eerste optie genomen. Daaruit concludeer jij dat je blijkbaar true hebt teruggekregen, maar dat is een foute conclusie. Je query gaat dus prima, maar afhandeling is simpelweg verkeerd.

Het is dus inderdaad helemaal gaan mysqli bug, maar dat wisten we natuurlijk al.
 
Arjan van Rijs

Arjan van Rijs

12/10/2013 00:01:40
Quote Anchor link
Beste Erwin,

helaas, ik heb het resultaat weldegelijk, op verschillende plekken zelfs, ge-echoot, en kreeg 1 terug en in één geval evalueerde $id === TRUE als waar. Maar je hebt een goed punt over de case. Ik zal het morgen eens omschrijven en kijken wat het resultaat is. Bedankt tot zover.
Ik krijg trouwens de indruk dat ik verkeerd geïnterpreteerd wordt; ik probeer niet te zeggen dat ik onfeilbaar ben, maar gewoon dat ik het niet meer weet en dus hulp nodig heb. Ik heb alles geprobeerd wat ik kon bedenken. Ik heb alles zelf aangeleerd en ga ervan uit dat hier mensen zitten die ervoor geleerd hebben...

ps: onderzoek gisteren op het web leerde me dat het probleem vaker voorkomt, alleen was bij die gevallen de oplossing om geneste statements uit elkaar te trekken, en ik gebruik bij voorkeur geen geneste statements.

Vriendelijke groet,

Arjan.

Toevoeging op 12/10/2013 00:09:27:

Oh, trouwens, de opmerking over dat binnen de switch automatisch de eerste statement wordt uitgevoerd is volgens mij niet waar. Als er een resource wordt teruggegeven dan evalueert TRUE niet tot waar en FALSE ook niet, dan moet dus juist de default worden uitgevoerd. En het feit dat zowel de insert als de update en deletequerys wel goed gaan, en dat ook een met opzet foute query tot FALSE evalueerde bewijst dat switch wel met booleaanse waarden kan omgaan (al is het daar misschien niet voor bedoeld).

Nogmaals vriendelijke groet en weltrusten (gaap)
 
Wouter J

Wouter J

12/10/2013 00:24:06
Quote Anchor link
>> Als er een resource wordt teruggegeven dan evalueert TRUE niet tot waar

Resource == true alleen resources !== true. Case werkt met equal to (==) en dus wordt de eerste case aangeroepen.

En nee, je wordt niet verkeerd begrepen. Het is alleen dat je iets een bug noemt, terwijl de kans dat het een bug is 0,001% is. 99 van de 100 keer is het een bug van de developer.

Doe eens een var_dump, dat is de enige methode om de ware waarde te zien.
 
Arjan van Rijs

Arjan van Rijs

12/10/2013 11:32:29
Quote Anchor link
Dank jullie, Erwin en Wouter,

weer iets geleerd. En om verdere Babylonische spraakverwarringen te voorkomen: is iets alleen een bug als het een fout is van de ontwerpers van een taal? In mijn optiek was ik aan het debuggen en impliceert 'bug' slechts een fout, waarbij ik in het midden laat door wie die fout begaan is. Het was dus geenszins mijn bedoeling om op tenen te gaan staan.

Met vriendelijke groet,

Arjan.
 
Erwin H

Erwin H

12/10/2013 13:03:39
Quote Anchor link
Arjan van Rijs op 12/10/2013 00:01:40:
Oh, trouwens, de opmerking over dat binnen de switch automatisch de eerste statement wordt uitgevoerd is volgens mij niet waar. Als er een resource wordt teruggegeven dan evalueert TRUE niet tot waar en FALSE ook niet, dan moet dus juist de default worden uitgevoerd. En het feit dat zowel de insert als de update en deletequerys wel goed gaan, en dat ook een met opzet foute query tot FALSE evalueerde bewijst dat switch wel met booleaanse waarden kan omgaan (al is het daar misschien niet voor bedoeld).

Dan heb je het nog steeds niet begrepen. Boolean waardes zijn niet het probleem in de switch, die worden correct geevalueerd. Het gaat erom als het GEEN boolean waarde is (de resource). Een resource kan door de switch niet geevalueerd worden en daarom wordt PER DEFINITIE de eerste optie genomen. NIET de default. De default wordt alleen gebruikt als geen van de eerdere opties gekozen kon worden, maar dat kan alleen bepaald worden als de expressie in de switch ook daadwerkelijk geevalueerd kan worden, wat hier dus nogmaals niet het geval is.

Voorbeeldje:
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
<?php
$test
= new stdClass();

switch( $test ){
  case
true:
    echo 'het is waar';
    break;
  case
false:
    echo 'het is niet waar';
    break;
  default:

    echo 'het is een object!';
    break;
}

?>

Test en zie wat je krijgt op je scherm.

Toevoeging op 12/10/2013 13:10:37:

Wat betreft de bug. Een bug is inderdaad een fout in de software waardoor iets ander gebeurt dan wat je zou verwachten. In die zin is dit een bug. Omdat je echter als topic titel hebt gekozen "Vreemde mysqli-bug?" doe je vermoeden dat jij denkt dat er iets fout gaat in de mysqli functies. Dat kan, er zitten vast nog bugs in, maar het is onwaarschijnlijk dat dat de oorzaak van het probleem is. Ik loop hier al een tijdje mee inmiddels en ik zie regelmatig mensen een zogenaamde bug melden (of vragen of het wellicht een bug is), maar ik heb nog nooit een topic gezien waar de conclusie ook daadwerkelijk was dat een bug in php de oorzaak was. Het komt altijd neer op een andere fout, vergissing, typo etc. Vandaar mijn eerdere melding over het feit dat ik het opmerkelijk vind dat je je afvroeg of het een bug was. Daarmee ben je niet op mijn tenen gaan staan, in zijn geheel niet.
 
Arjan van Rijs

Arjan van Rijs

12/10/2013 16:57:42
Quote Anchor link
Okee. De pointe van de switch was me al duidelijk na het bericht van Wouter hoor. Alles werkt nu zoals bedoeld (aangepast naar if). Nog genoeg foutjes en over-het-hoofd-gezienigheidjes over.

Vriendelijke groet,

Arjan.
Gewijzigd op 12/10/2013 16:58:24 door Arjan van Rijs
 



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.