Vreemde mysqli-bug?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

C#.NET-developer - JUNIOR

Functie omschrijving Voor een leuke opdrachtgever in omgeving Brielle zijn wij op zoek naar een junior developer. Werk jij graag met de volgende tools & technieken? C#, .NET, ASP.NET, MVC en SQL? Kijk dan snel of dit iets voor jou is! Als programmeur bij een productiebedrijf zal je voornamelijk nieuwe software schrijven maar ook bestaande software verbeteren. Verder werk je veel samen in back end projecten met leuke collega's. Bedrijfsprofiel Met een team van ruim 130 personen staan ze elke dag weer klaar om IT en Business te combineren door het ontwikkelen van producten op maat. Er zijn 3 teams,

Bekijk vacature »

C# .NET Software Developer

Functie omschrijving Ben jij op zoek naar een nieuwe uitdaging binnen software development waar je gaat werken voor een jong en flexibel bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Software Developer met ervaring binnen C# .NET die enthousiast wordt van het aansluiten en begeleiden van (complexe) nieuwe klanten. Verder begeleid je complexe projecten, ben jij iemand die altijd kansen ziet? Dan zoeken wij jou! In deze functie ga jij je bezighouden met: Meedenken in oplossingsrichtingen; Werken aan de architectuur; Het verbeteren van functionaliteiten binnen het dataplatform; Ontwikkelen van nieuwe technologieën. Bedrijfsprofiel Waar ga je aan de

Bekijk vacature »

Medior Front end developer React

Functie Voor deze functie ben ik op zoek naar een enthousiaste front end developer die communicatief vaardig is. Jij wordt onderdeel van een enthousiast jong team dat werkt aan grote websites. Binnen jouw rol ben jij diegene die de vertaling maakt van design naar functionele code en zorg jij voor goede experience op meerdere platformen. Dit doe je natuurlijk door gebruik te maken van Javascript, HTML, CSS en React. Daarnaast wordt er gebruik gemaakt van Webcomponents en verschillende authenticatie tools. Doordat er hier gestreefd wordt naar de beste gebruikerservaringen, wordt het product constant doorontwikkeld. Hierdoor blijven ze voor op de

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 »

Anaplan Developer

Dit ga je doen What are you going to do: Picking up Stories: Design planning had, how are we going to build it in Anaplan; Talking to the end user to build a forecasting model; Having contact with the data team about which data is needed; Being able to convert an Excel sheet into a 3, 4 or 5 dimensional modeling environment; Giving knowledge sessions about Anaplan; Solving incidents; Making instructional videos on how teams should read forecasts; Writing blogs about forecasting. Hier ga je werken We are looking for an Anaplan Builder to deliver end-to-end solutions within a big

Bekijk vacature »

Junior Software Developer

Functie omschrijving Wij zijn op zoek naar een Junior Software Developer .NET, C# voor een gaaf bedrijf in de omgeving van Utrecht! Sta jij aan het begin van je carrière en heb je net je HBO of WO-diploma in de richting van ICT of Techniek mogen ontvangen? En heb jij grote affiniteit met software development? Lees dan snel verder! Voor een opdrachtgever in de omgeving van Utrecht, zijn wij op zoek naar een Junior Software Developer. Werk jij graag aan verschillende projecten en ga je graag klanten op bezoek? Dan is dit de ideale functie voor jou! Binnen deze functie

Bekijk vacature »

.NET Developer

Functie omschrijving Jij gaat in de functie van Software Developer werken met C# en .NET framework. Jij gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Daarnaast optimaliseer je de bestaande software. Oplossingen waar de klant echt iets aan heeft, jij krijgt er energie van op dit te realiseren. Je gaat werken in een Microsoft omgeving(ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Bedrijfsprofiel Je komt te werken in een klein team van developers, die zich voornamelijk bezighouden met back-end development. Verder staat dit

Bekijk vacature »

Junior Front-End Developer

Je maakt een vliegende start van je carrière, door meteen mee te bouwen aan de digitale oplossingen van Coolblue. Wat doe je als Junior Front-End Developer bij Coolblue? Als Junior Front-End Developer ben je meteen vanaf de start onderdeel van een development team. Je kijkt veel mee met collega’s en volgt trainingen. Op dat moment komt je wil om te blijven leren naar boven. Daarnaast pak je in de sprints ook je eigen stories op om Coolblue iedere dag een beetje beter te maken. Je sterk analytisch vermogen komt dan goed van pas! Ook Junior Front-End Developer worden bij Coolblue?

Bekijk vacature »

Full-stack Developer

As a Full-stack developer at KUBUS, you will develop the (web)applications and services of BIMcollab. You will work on both the front- and back-end. As a software company, KUBUS is in a unique position. We build our own products that are used by tens of thousands of users worldwide. Our company is just the right size: big enough to make a real impact in the market, but small enough that as an individual developer you can have an impact and really make a difference. Our development team consists of over 40 developers, testers, scrum masters and product owners, divided over

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 »

Fullstack developer - medior

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en zou jij graag bij een platte maar informele organisatie willen werken? Voor een mooi softwarebedrijf in omgeving Gorinchem zijn wij op zoek naar versterking. Als Fullstack developer wordt je bij dit bedrijf onderdeel van de volledige ontwikkeling van requirement tot oplevering! Werkzaamheden Jouw focus ligt op de front end en alles wat daarbij komt kijken. Je gaat ontwerpen, ontwikkelen, testen en valideren. Je zult voornamelijk werken met React.js en Typescript. Maar ook Javascript, HTML en CSS komen aanbod. Daarnaast zal je ook regelmatig met de back end werken! Bedrijfsprofiel Onze

Bekijk vacature »

Airport Developer / System engineer

De functie Als onze nieuwe Airport Developer / System Engineer is je doel om uit nieuwbouw- en onderhoudsprojecten maximale waarde te creëren voor Schiphol Group en haar stakeholders. Vanuit je visie en expertise, maar ook (technologische) ontwikkelingen, wetgeving en beleid vertaal je klantwensen naar een gedegen programma van eisen. In de planontwikkelingsfase werk je nauw samen met Plan Ontwikkelaars om je kennis in te brengen ten behoeve van de kwaliteit van het investeringsvoorstel. Je overlegt met diverse partijen, stelt de vraag achter de vraag en verbindt zo de belangen van de luchthaven, proceseigenaar en asseteigenaar om tot een gedragen ontwikkelopgave

Bekijk vacature »

Embedded Software Developer

Functie omschrijving Voor een mooi softwarebedrijf in omgeving Moordrecht zijn wij op zoek naar een Embedded Software developer. Ben jij enthousiast en een echte team player? Lees dan snel of dit iets voor jou is! Binnen deze rol houdt jij je bezig met alle werkzaamheden die nodig zijn om een functionaliteit te bouwen. Denk aan ontwerpen, architectuur, programmeren en algoritmes. Je voert test en validatie werkzaamheden uit bij de implementatie bij de klant. Ben jij een Embedded Software Developer die affiniteit heeft met de allernieuwste technieken? Laat dan snel wat van je horen! Bedrijfsprofiel Onze opdrachtgever bestaat uit een groot

Bekijk vacature »

Full Stack Developer

Ben jij een kei van een full-stack developer? Heb je ambitie om te groeien en jezelf te ontwikkelen binnen een ambitieus bedrijf? Gaat jouw hart sneller kloppen van transpilers of frameworks zoals Angular, Vue of React? Dan ben jij de persoon die wij zoeken! Voor onze opdrachtgever zijn wij op zoek naar een full-stack developer om onderdeel te zijn van een team dat bestaat uit gedreven developers. Ieders met hun eigen specialiteiten en kennis van de projecten en behoeften vanuit de product owners. We zoeken iemand die met zijn/haar huidige competenties en domeinen dit team wil begeleiden, stimuleren en tevens

Bekijk vacature »

Applicatieontwikkelaar ABAP

Bedrijfsomschrijving Functieomschrijving De kandidaat zal worden ingezet binnen een van de DevOps teams binnen SCI (Service Centrum Inburgering) voor het ontwerpen en bouwen in SAP ABAP van de binnen SCI gebruikte informatiesystemen. Voornaamste voorkomende werkzaamheden zijn het aanpassen van en bouwen van nieuwe programmatuur in ABAP (Objects), waarbij ook gebruikt wordt gemaakt van DDD (Domain Driven Design) en het opstellen/aanpassen van Functionele/Technische ontwerpen. Daarnaast moeten ook formulieren met SAP Smartforms worden aangepast. Verder speelt de overgang naar SAP4Hana en SAP CPI. Vanwege het veelvuldig gebruik van SAP PO is kennis hiervan een pré. Achtergrond opdracht Momenteel werken meerdere DevOps teams

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

19/12/2024 19:57:47
 
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.