Vreemde mysqli-bug?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Starter/junior PHP developer

Functie Momenteel zijn ze op zoek naar een junior PHP developer om het team te versterken. Als back-end developer bouw je de enterprise software die hun bedrijf helpt bij haar primaire processen. Afhankelijk van de omvang van het project werk je in een klein team aan een project. Ze hebben dagelijkse stand-ups en elke twee weken een scrumsessie, begeleid door de Scrum Master, waar je je ideeën kunt presenteren en samen met de Product Owner kunt werken aan het beste product. Ze vertrouwen enorm op hun eigen bedrijfssoftware. Dit geeft hun een groot voordeel ten opzichte van hun concurrentie. Zo

Bekijk vacature »

Junior PHP Developer

Functieomschrijving Junior PHP Developer gezocht! Voor een opdrachtgever in de regio Gelderland zijn wij op zoek naar een Junior PHP Developer die onderdeel gaat worden van het ontwikkelingsteam van deze organisatie. In deze functie ga jij aan de slag met het schrijven van software voor de aansturing van en het managen van windparken en bijbehorende onderdelen. Hiernaast ga jij je bezighouden met het ontwikkelen, testen en onderhouden van diverse webapplicaties. Het team waarin je komt te werken bestaat uit 3 developers, hierdoor krijg je veel verantwoordelijkheid en de kans om jezelf verder te ontwikkelen. Er wordt echter wel van je

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 »

Medior Java developer

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 »

Software developer (Python)

Functie Je komt te werken in het IT-team bestaande uit de Lead developer en 4 (medior/senior) developers. Gezamenlijk werken jullie aan de verbetering en uitbreiding van de software. Binnen het development team is er veel vrijheid en zelfstandigheid, zonder dat ze hiermee afdoen aan de kwaliteit. Zo hebben ze elke ochtend een korte stand-up (10:00 uur) en houden ze zo nu en dan pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Je hebt in je werk oog voor kwaliteit, risico’s en het klantbelang. Communicatie met

Bekijk vacature »

Senior .NET Ontwikkelaar

In het kort Als Senior .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag met complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek (denk aan ECT) en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan

Bekijk vacature »

Front-end developer Consultancy in teamverband wer

Functie Het team bestaat uit User Experience designers, Data Scientists en Software Engineers. Momenteel zijn ze op zoek naar een ervaren Front-end of Fullstack developer die samen met de consultants aan de slag gaat om de business requirements te vertalen naar technische oplossingen. Los van het finetunen van extenties, help je bij het configureren van bijvoorbeeld een mobiel bankieren app. Hierin ben je van A tot Z betrokken en zie je bijvoorbeeld ook toe op de uitvoering van testen. Je expertise wordt optimaal benut en je krijgt verschillende kansen om deze uit te breiden door met verschillende innovatieve technologieën aan

Bekijk vacature »

C# developer

Functie Als C# ontwikkelaar ben jij de spin in het web bij deze organisatie. Jij begeleidt en traint de field engineers die bij de klanten machines leveren en installeren. Daarnaast ondersteun jij de field engineers als zij bij de klant vastlopen bij het installeren van de machine m.b.t. software matige vragen. Jouw doel is dan ook om de technische kennis van de field engineers door middel van training zoveel mogelijk uit te breiden. Dit om ervoor te zorgen dat zij zelfstandiger software matige problemen kunnen oplossen. Ook ben jij verantwoordelijk voor het bedenken van software oplossingen voor klanten en dit

Bekijk vacature »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

Back-end PHP Developer

Dit ga je doen 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. Hier ga je werken Onze klant, gevestigd in de omgeving van Alkmaar, levert wereldwijd oplossingen op het gebied van IT. Dag in dag uit werken zij met veel passie aan hun product waarmee ze streven naar verbeteringen binnen zorg. Voor onze klant zijn we op zoek naar een medior PHP Developer. Je komt te werken

Bekijk vacature »

C#.NET Developer

Functieomschrijving We are looking for a dutch native speaker In deze uitdagende functie ga je werken als onderdeel van het development team, in de functie van C#.NET Developer, Je gaat maatwerk software bouwen voor diverse klanten. Ook optimaliseer je bestaande software en bouw je API koppelingen. Je bent vooral met back-end development bezig. Je krijgt veel vrijheid in deze functie en je krijgt de kans om mee te denken in bedrijfsprocessen. Deels thuiswerken is geen enkel probleem! Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Het is van oorsprong een familiebedrijf, die gestart zijn met het bouwen van

Bekijk vacature »

.Net Front-end Ontwikkelaar

Wij zoeken een .Net Front-end Ontwikkelaar! Omschrijving Kun jij snel schakelen en ben je stressbestendig? Dan zoeken wij jou! Als .Net Front-end Ontwikkelaar help je mee aan de webapplicatie die over de hele wereld door allerlei bedrijven wordt gebruikt. Je werkt daarnaast mee aan nieuwe en verbeterde functionaliteiten en helpt met het oplossen van bugs. Over de opdrachtgever Je komt te werken in een ambitieus team dat zich blijft ontwikkelen. Dit is alle informatie die we nu kunnen delen over de werkplek. Als jij de .Net Front-end Ontwikkelaar bent voor deze job, vertellen we je snel nóg meer. Eisen Heb

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET Core developer wordt jij onderdeel van ons team met drie breed ontwikkelde software engineers en een flexibele schil met zes ervaren freelancers. Jij gaat mee in de visie van onze organisatie om als IoT partner in deze branche specifieke markt “het” platform te blijven innoveren en deze ook steeds slimmer te maken. Wij hopen dan ook zeker dit in de toekomst te kunnen realiseren met bijvoorbeeld Artificial Intelligence. De architectuur van ons platform is opgemaakt uit een deel eigen protocol, een interface laag en een laag welke de protocollen van derde partijen vertaald naar het eigen

Bekijk vacature »

Lead developer

Functie Als Lead developer wordt jij onderdeel van een multidisciplinair team van circa 23 software engineers. Als team werken jullie agile en zijn termen als Continuous Integration en Continuous Delivery dagelijkse koek. Jullie werken aan uitdagende en afwisselende projecten met als doel klanten een totaal oplossing aan te kunnen bieden. Jij wordt verantwoordelijk voor complete projecten waarbij jij als verantwoordelijke zorgt dat het project op de juiste manier blijft draaien. Zo haal jij ook de requirements op bij de klant en kijk jij samen met het team en met de salesafdeling hoeveel uren hiervoor nodig zijn. Daarnaast stuur jij jouw

Bekijk vacature »

Lasrobotprogrammeur/operator

Heb je interesse in trekkers en beschik je overvlijmscherpse precisie? Solliciteer dan op deze vacature! Als Lasoperator ben je vooral bezig met het maken van nieuwe lasrobotprogramma’s en het optimaliseren van bestaande programma’s, zowel online als offline (incl. het bedienen van de Lasrobots). Daarnaast draag je bij aan een optimaal rendement van de las robots. Verder heb je de volgende werkzaamheden: Het meewerken als operator c.q. Robotlassen niveau 2 (van complexe samenstellingen/halffabricaten), het om- en instellen van de diverse stations van lasmallen (productdragers), het afwerken van laswerk (verwijderen lasspetters en oxiden), het bewaken van de machineplanning (op bewerkingen) incl. de

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

05/05/2024 16:39:20
 
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.