[php/interbase] fout als ik een boolean selecteer

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
Hoi,

Ik ben een site aant bouwen die verbinding maakt met een interbase-database. Nu krijg ik steeds de volgende fout als ik een query doe waarin ik een boolean selecteer, selecteer ik geen boolean treedt deze fout ook NIET op:

Dynamic SQL Error SQL error code = -804 Incorrect values within SQLDA structure in /home/...

Ik dacht eerst dat dit een bug was in php: http://bugs.php.net/bug.php?id=23936 maar volgens de changelog zou deze bij versie 4.3.3 gefixt moeten zijn, wij draaien hier 4.4.2 dus daar zou het niet aan kunnen liggen.
Iemand ervaring met dit probleem? Ik kan er behalve de zojuist vermelde link echt helemaal niets over vinden.

Vast bedankt voor reactie!

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Kun je de SQL eens posten? Misschien is er toch toevallig iets geks aan dat niet met de boolean te maken heeft.

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
$order_query = "select * from location_order where order_id = $order_id";

Dit is alles en de order_id is NIET leeg! :)

Het maakt niets uit wat ik verder ermee probeer. Doe ik een query "select niet_boolean_veld from tabel" dan gaat het goed en doe ik een query "select boolean_veld from tabel" dan gaat het fout.

Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

En het gaat altijd fout bij een boolean veld of alleen een specifiek boolean veld of een specifieke tabel? Of toevallig een verkeerde naam? Probeer eens die boolean te gebruiken in je where clausule. (... AND boolean_veld) kijken of het veld dan wel gepikt wordt en het alleen fout gaat in de SELECT.

Als het niet zoiets is, lijkt het vrij veel op een fout in PHP/driver/Interbase.

Ps. PHP/Interbase, aparte keuze of zit er een diepere gedachte achter?

[ Voor 10% gewijzigd door JKVA op 06-03-2006 20:34 ]

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 02:22
Hardcell schreef op maandag 06 maart 2006 @ 16:01:
$order_query = "select * from location_order where order_id = $order_id";

Dit is alles en de order_id is NIET leeg! :)

Het maakt niets uit wat ik verder ermee probeer. Doe ik een query "select niet_boolean_veld from tabel" dan gaat het goed en doe ik een query "select boolean_veld from tabel" dan gaat het fout.
Als ik me niet vergis moet dat sowieso

$order_query = "select * from location_order where order_id = '$order_id'";

zijn, maar zoals je het probleem omschrijft lijkt het daar niet aan te liggen. Wat gebeurt er als je het veld als een ander type mapt, dus "SELECT CAST(boolean_waarde AS CHAR) FROM location_order" bijvoorbeeld?

Geen idee of interbase ook deze syntax ondersteunt trouwens, zul je zelf even moeten controleren

Ow, en dat dit hoogst waarschijnlijk aan interbase ligt, niet aan PHP. Sowieso heeft je voorbeeld voor zover ik kan zien niets te maken met boolean select queries maar eerder met een incompatabliteitsprobleem tussen Interbase 7 en PHP 4.

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • coenbijlsma
  • Registratie: Augustus 2004
  • Niet online
misschien maak ik hier wel een hele grote fout, maar moet je zulke dingen als variabelen bij PHP niet aan elkaar plakken met een punt? dus:
PHP:
1
$order_query = "select * from location_order where order_id=".$order_id;


ik zie trouwens ook nog http://bugs.php.net/bug.php?id=31954 staan...

[ Voor 18% gewijzigd door coenbijlsma op 07-03-2006 09:16 . Reden: een andere bug gevonden... ]


Acties:
  • 0 Henk 'm!

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 11-06 22:22
Hier heb ik zelf ook een keer grote problemen mee gehad. Interbase liep vast als ik booleans probeerde te selecteren uit een database.

Uiteindelijk 'opgelost' door geen boolean velden te gebruiken maar chars...

Kijk:
http://bugs.php.net/bug.php?id=31954

[ Voor 13% gewijzigd door Mithrandir op 07-03-2006 09:16 ]

Verbouwing


Acties:
  • 0 Henk 'm!

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
cbijlsma schreef op dinsdag 07 maart 2006 @ 09:09:
misschien maak ik hier wel een hele grote fout, maar moet je zulke dingen als variabelen bij PHP niet aan elkaar plakken met een punt? dus:
PHP:
1
$order_query = "select * from location_order where order_id=".$order_id;


ik zie trouwens ook nog http://bugs.php.net/bug.php?id=31954 staan...
Als je een string tussen "" gooit in php mag je gewoon variabele-namen ertussen plakken, ik d8 dat het niet mocht als je hem tussen '' zet dus daar zit de issue niet.
JKVA schreef op maandag 06 maart 2006 @ 20:34:
En het gaat altijd fout bij een boolean veld of alleen een specifiek boolean veld of een specifieke tabel? Of toevallig een verkeerde naam? Probeer eens die boolean te gebruiken in je where clausule. (... AND boolean_veld) kijken of het veld dan wel gepikt wordt en het alleen fout gaat in de SELECT.

Als het niet zoiets is, lijkt het vrij veel op een fout in PHP/driver/Interbase.

Ps. PHP/Interbase, aparte keuze of zit er een diepere gedachte achter?
Het lijkt mij idd ook een fout in php. Ik gebruik intbase omdat die geen overbodige zooi heeft, ben niet zo feature-geil wat databases betreft. :P
Maar ib heeft wel triggers / generators / stored procedures en dat is eigenlijk alles wat ik nodig heb in een fatsoenlijke db. Heb hiervoor met mysql gewerkt (en even getest met mssql) maar vind dit toch stukken fijner en sneller werken.

Ik dacht het probleem eerst op te lossen door het boolean veld te casten )select cast(boolean_veld as integer)) maar dit wil ook niet.

Ik hoop het nog met bv een stored procedure te kunnen oplossen anders moet ik m'n hele backend gaan ombouwen voor 1 boolean veld wat er vanaf de website geselecteerd moet worden.. 8)7

Acties:
  • 0 Henk 'm!

  • Hardcell
  • Registratie: November 2004
  • Laatst online: 03-02-2023
Met een view is het me gelukt, niet de mooiste oplossing maar het werkt!

Ik doe het met de volgende view:

code:
1
2
3
4
create view select_bool (id, bool)
as
select id, cast(boolean_veld as integer)
from tabel;


Zo kan ik toch gewoon een query doen maar dan nu op de view. Wel vind ik het vaag dat wanneer ik vanaf de website dezelfde query met typecast doe dat ik dan die error krijg en wanneer ik het uit de view selecteer (gelukkig) niet.

Acties:
  • 0 Henk 'm!

Anoniem: 30225

Welke versie van Interbase gebruik je?
Wat is de versie van gds32.dll?

Geef eens een volledige test query
En laat de opbouw van een test tabel zien.

Interbase kent standaard helemaal geen boolean-veld (is ook geen SQL-92type, wel van SQL3). Hoe heb je deze gemaakt?
Heb je een domain aangemaakt?
Hoe maak je onderscheid in de tabel tussen true en false? 0/1,true,false,T,F, etc?
Pagina: 1