Vreemde mysqli-bug?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Software Developer

Functie omschrijving Op zoek naar een nieuwe uitdaging binnen PHP? Lees dan snel verder! Wij zoeken een ervaren PHP developer die binnen een organisatie gaat functioneren als verlengstuk van de klant. Wij zoeken voor deze iemand die technisch complexe zaken met enthousiasme en plezier aanvliegt. Verder moet je instaat zijn om je tijd goed te managen omdat je aan meerdere projecten tegelijkertijd werkt. Je werkt met de nieuwste technieken en tijdens deze uitdaging werk je veel samen met de front-end developers van deze organisatie. Wij zoeken iemand die zichzelf graag uitdaagt en altijd de beste wilt zijn. Bedrijfsprofiel Waar ga

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 »

Front-end developer - working on software for arou

Functie They have recently started looking for an experienced Front-end (mobile/app) developer. Because of the short lines within the team, they are also looking for someone who can communicate with the service desk, sales and support for technical questions. You will join their IT team consisting of about 10 colleagues divided over two teams in rooms opposite each other. Half of these are involved in their front-end. You will work together with, among others, the Architect, 1 senior, 1 junior and there is a Team Leader. In terms of technology, they work with a unique tech-stack, particularly because of the

Bekijk vacature »

E-Identity Developer met Projectleider Kwaliteiten

Functieomschrijving Voor de kamer van koophandel zijn we op zoek naar een E-Identity developer met projectleider kwaliteiten. Voor deze opdracht zoekt KVK een Informatieanalist met Technisch Projectleider en ICT developer kwaliteiten, met kennis van E-identity. We zoeken in de breedte en niet specifiek in de diepte qua skillset. Een Junior Projectmanager, een Junior Informatieanalist, een Junior Developer (full stack), een Junior Designer en een Junior ICT architect ineen, met een sterk gevoel van stakeholder management en planning vaardigheden. Door de internationale setting, én de realisatie van ontsluiting van en naar basisregisters toe zijn wij op zoek naar enige ervaring binnen

Bekijk vacature »

C# .Net Developer

Dit ga je doen Het bouwen van Api's; Nieuwe oplossingen bouwen met C# .Net; De huidige software uitbouwen met C# .Net; Meewerken in projecten; Meedenken aan de toekomstplannen en verbeteringen; Onderdeel van het Scrum Team. Hier ga je werken Onze klant is een dienstverlenende organisatie voor diverse soorten organisaties in Nederland. Ze zijn van oorsprong een familiebedrijf en er is een open cultuur. Ze zijn vooruitstrevend op IT gebied en hebben een eigen inhouse development team van circa 11 man. Je komt hier te werken in het subteam .Net Core. Hier werken ze volgens scrum met de nieuwste technieken en

Bekijk vacature »

Traineeship ICT regio Amsterdam/Utrecht

Wat ga je doen? Het traineeship begint met een fulltime maand cursussen en praktijkdagen, waarin je de basis van het IT-vak leert op de Shared Servicedesk (SSD). Daarnaast ga je meteen aan de slag voor je eerste certificering! (ITILv4). Je start in een groep met 4 tot 10 deelnemers, waarmee jij gedurende die maand optrekt en je kennis kunt delen. Na het voltooien van de eerste maand ga je direct voor een langere periode aan de slag bij één van onze klanten of blijf je intern bij ons op de Shared Servicedesk. Je bent het eerste aanspreekpunt van de eindgebruikers

Bekijk vacature »

Lead React Developer

Dit ga je doen Als Lead React Developer zul jij je voornamelijk gaan bezighouden met: Het werken aan tal van uiteenlopende projecten waar gloednieuwe (web)applicaties van scratch af aan ontwikkeld worden met o.a. React (Native) en Drupal; Het aansturen van een team bestaande uit 5-6 talentvolle en gedreven ontwikkelaars; Het adviseren en meedenken over nieuwe (technische) oplossingen en te gebruiken tools/frameworks; Het meedenken over de architectuur en de juiste implementatiebeslissingen maken; De doorontwikkeling van huidige applicaties. Hier ga je werken Als je inderdaad een ervaren Lead React Developer bent die zichzelf graag nog verder wil ontwikkelen dan is het goed

Bekijk vacature »

Network Engineer (f/m/d) in Heidelberg

Network Engineer (f/m/d) The IT Services team operates and supports the IT infrastructure and services at EMBL headquarters in Heidelberg and at the laboratory’s sites in Barcelona and Rome. As part of IT Services, the Network team is responsible for managing and developing the network infrastructure in our data centres, on campus, and to our external network providers. As a leading scientific institution with highly data-intensive research, extensive data flows at and between the laboratory’s six sites and to the Internet, EMBL is connected to national and international scientific networks using state-of-the-art technologies from vendors including Cisco, Extreme Networks and

Bekijk vacature »

Backend Developer PHP Laravel SaaS

Dit ga je doen Het ontwikkelen van nieuwe features die bijdragen aan de groei van de klanten van de organisatie; Je denkt mee over nieuwe innovaties, features en verbeteringen in de applicatiearchitectuur; Je draagt bij aan de continue ontwikkeling van jouw team doordat je elke dag streeft naar het verbeteren van jouw eigen prestaties; Je neemt actief deel aan Scrum meetings en de Backend Guild. Hier ga je werken Voor een snel groeiend bedrijf, in de regio Nieuw Vennep, zijn wij opzoek naar een ervaren Backend Developer. De organisatie is actief in de e-commercebranche en ontzorgt haar klanten middels een

Bekijk vacature »

Frontend Developer - Leeuwarden

Frontend Developer – Leeuwarden Als Frontend Developer bouw jij mee aan het onderwijs van de toekomst! In een scrum team werken met jonge en enthousiaste collega’s, moderne technieken, ruimte voor eigen ontwikkeling en op een proactieve wijze kunnen meewerken aan innovatie binnen het onderwijs. Magister is het state-of-the-art softwarepakket dat scholen in het voortgezet onderwijs op alle fronten ontzorgt. Van leerlingenadministratie tot het ondersteunen van individuele leerlijnen, van toegang tot digitaal lesmateriaal tot het plannen van het lesrooster. In de Magister app bedient Magister ruim 2,5 miljoen gebruikers waarvan, dagelijks meer dan 600.000 unieke. Hiermee is Magister de absolute marktleider

Bekijk vacature »

SQL beheerder / ontwikkelaar

Functie omschrijving Voor een klant in omgeving Tiel zijn wij op zoek naar een SQL beheerder met affiniteit met technisch applicatiebeheer. Je krijgt een fijne in-house werkplek waar je gaat werken aan diverse projecten. Dit bedrijf doet het beheer van databases voor een aantal bancaire klanten. Op dit momenten hebben zij ruim 1500 databases in beheer. Jouw werkzaamheden gaan er als volgt uit zien: Je gaat de development afdeling ondersteunen bij het ontwikkelen van MS SQL Scripts. Je zal zowel zelfstandig als in teamverband MS SQL databases installeren & beheren. Je monitort en onderzoekt incidenten en de achterliggende oorzaken. Je

Bekijk vacature »

Medior Front-end Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Medior Front-end Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

Software Ontwikkelaar PHP

Functie omschrijving Full Stack Software Ontwikkelaar gezocht! Voor een bedrijf in de regio van Ermelo zijn wij op zoek naar een Software Ontwikkelaar die gaat bijdragen aan het door ontwikkelen, onderhouden en optimaliseren van SaaS applicatie van dit bedrijf. Hierbij ga jij voor- en samenwerken met de klanten van de organisatie, het is hierbij dus van groot belang dat je communicatief vaardig bent en dat je beschikt over beheersing van zowel de Nederlandse als Engelse taal. Bedrijfsprofiel Waar ga je werken? Altijd al in een echt familiebedrijf willen werken? Dan is dit je kans! Het bedrijf waar je komt te

Bekijk vacature »

Junior .NET developer

Functie Ons programma is voor afgestudeerde enthousiastelingen die het als een uitdaging zien om met een klein dynamisch team bij de grootste bedrijven van Nederland aan de slag te gaan. Tijdens jouw dienstverband word jij begeleid door een talent manager. Het ontwikkelen van jouw talent staat hierbij centraal. Het programma doorloop je met een team van circa 8 Mede- trainees. De eerste maand start je met een fulltime inhouse opleiding. Deze staat geheel in het teken van de werkzaamheden die jij verder in het programma zult uitvoeren. Na deze opleidingsmaand ga je aan de slag in een dynamische omgeving bij

Bekijk vacature »

Informeel bureau zoekt Senior PHP developer

Functie Als senior PHP developer neem je het voortouw in ontwikkeltrajecten en ben je in staat werk uit te leggen aan collega’s om zo je kennis met hen te delen. Je deinst niet terug voor ingewikkelde projecten. Deze zie jij alleen maar als uit uitdaging. Je werkt doorlopend aan klantcases (en hierdoor je klant echt leert kennen), maar toch ben je afwisselend bezig. Dit alles in een vrije en ontspannen werksfeer, met een team van gelijkgestemde. Binnen de development teams werken ze met o.a. PHP, Laravel, React, Node, Elastic, Amazon AWS, JIRA, Solid, Domain-driven-design, Doctrine, Redis, docker, Kubernetes, CI, PHP

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

17/11/2024 22:34:14
 
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.