[PHP] Too few parameters

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Theske
  • Registratie: Februari 2003
  • Laatst online: 14-05-2017
Beste mensen van het goede leven.

Momenteel krijg ik de volgende error, ik heb al verschillende dingen geprobeerd maar kom er gewoon niet uit
code:
1
Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1., SQL state 07001 in SQLExecDirect in C:\Inetpub\wwwroot\main.php on line 90


En ik gebruik de volgende code :::
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?
 $nr = $_GET['nr'];     
    
    $db = "C:/Inetpub/wwwroot/Projecttabellen.mdb"; 
    $conn = odbc_connect('DRIVER={Microsoft Access Driver (*.mdb)}; DBQ='.$db, '', '');
    
    $qryProject = "SELECT * FROM Projecten WHERE Projectnr = '$nr' ";
    
                if( $resProject = odbc_exec($conn, $qryProject) )
            {
              while( $obj = odbc_fetch_array($resProject) )
              { 
//              echo '<pre>'.print_r($obj, 1).'</pre>';
    
                $Projectnaam = $obj['Projectnaam'];
                $Projectnr = $obj['Projectnr'];
                $Locatie = $obj['Locatie'];
                $Land_id = $obj['Land-id'];
                $Categorie_id = $obj['Categorie-id'];
                $Opdrachtsoort_id = $obj['Opdrachtsoort-id'];
                $Kenmerken = $obj['Kenmerken'];
                
              }
            }

    $qryLand = "SELECT Land FROM Land WHERE Land-id = '$Land_id' ";
    
                if( $resLand = odbc_exec($conn, $qryLand) )   // line 90
            {
              while( $obj1 = odbc_fetch_array($resLand) )
              { 
                    $Land = $obj1['Land'];            
              }
            }
?>

Ik had al o.a. op het forum gezocht en daar kwam ik ergens tegen dat bepaalde waarden verkeerd in de code waren gezet, maar dat is hier volgens mij niet aan de orde.

Ook heb ik de volgende query geprobeerd, maar dit maakte geen verschil.
PHP:
1
2
3
<?
    $qryLand = "SELECT * FROM Land WHERE Land-id = '$Land_id' ";
?>

Bij het weghalen van de WHERE geeft hij geen foutmelding, alleen krijg ik uiteraard niet de juiste output

Wanneer ik in de query Land-id tussen [] zet geeft hij een "Data type mismatch in criteria expression., " melding en als ik Land-id tussen quotes zet geeft hij weer een undefined index aan.
Het ligt ook niet aan de variabele want in de echo geeft hij gewoon een ' 1 ' weer of iets dergelijks.
Variabele buiten quotes halen mocht ook niet baten.

Hebben jullie nog ideeen?

Proud member of the Cosmic Cows


Acties:
  • 0 Henk 'm!

  • supergert
  • Registratie: December 2001
  • Niet online
Theske schreef op woensdag 31 augustus 2005 @ 11:27:
Ook heb ik de volgende query geprobeerd, maar dit maakte geen verschil.
PHP:
1
2
3
<?
    $qryLand = "SELECT * FROM Land WHERE Land-id = '$Land_id' ";
?>
Voor numerieke velden worden toch geen quotes gebruikt?

Dus probeer zoiets eens:
PHP:
1
2
3
<?
    $qryLand = "SELECT * FROM Land WHERE Land-id = $Land_id ";
?>
als ik Land-id tussen quotes zet geeft hij weer een undefined index aan.
Welke quotes? ' of ` ? is een verschil namelijk (in MySQL in elk geval, ik weet zo niet of odbc dat ook doet, mag je zelf even opzoeken ;) )


En klopt Land-id wel? Moet dat niet Land_id of Landid zijn?

ZX81 > C64 > Amiga > BeBox > PowerMac > pc-klonen...


Acties:
  • 0 Henk 'm!

  • ID-College
  • Registratie: November 2003
  • Laatst online: 20:49
PHP:
1
$qryProject = "SELECT * FROM Projecten WHERE Projectnr = '$nr' ";

Daar moet dus ook dit komen: ;)
Als dit een nummer is natuurlijk, maar dat lijkt me wel aangezien hij ook een variabele nr heeft :)
PHP:
1
$qryProject = "SELECT * FROM Projecten WHERE Projectnr = $nr ";


Oh dit had je ook al geprobeerd dus lees ik net :P

[ Voor 143% gewijzigd door ID-College op 31-08-2005 11:49 ]


Acties:
  • 0 Henk 'm!

  • ShadowLord
  • Registratie: Juli 2000
  • Laatst online: 06-05 07:53
Probeer eens:
PHP:
1
$qryLand = "SELECT * FROM Land WHERE [Land-id] = $Land_id";

Land-id in blokhaken dus zodat ie er neit een forumle van probeerd te maken en $Land_id ZONDER quotes zodat ie het ziet als nummer, niet string (want dat is de type mismatch).

Of nog beter (wanneer $Land_id user input is):
PHP:
1
$qryLand = "SELECT * FROM Land WHERE [Land-id] = ".(int)$Land_id;

Dan force je namelijk $Land_id naar een int en voorkom je SQL injection.

You see things; and you say, "Why?" But I dream things that never were; and I say, "Why not?"


Acties:
  • 0 Henk 'm!

Anoniem: 62555

die quotes moeten zeker wel om $Land-id lijkt me (SQL Insertion) ... maar dat is ook de oplossing niet voor je probleem lijkt me. Beter is nog:

code:
1
$qryLand = "SELECT * FROM Land WHERE [Land-id] = '" . (int)$Land_id ."';";


En waar komt die $Land_id vandaan? Uit een querystring / formulier?
Gebruik dan (int)$_POST['Land_id']

Acties:
  • 0 Henk 'm!

  • Rickets
  • Registratie: Augustus 2001
  • Niet online

Rickets

Finger and a shift

In de user comments van http://nl2.php.net/odbc_exec staat dat je die foutmelding krijgt als je een veld in je query gebruikt dat niet bestaat.

[ Voor 7% gewijzigd door Rickets op 31-08-2005 11:52 ]

If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.


Acties:
  • 0 Henk 'm!

  • Theske
  • Registratie: Februari 2003
  • Laatst online: 14-05-2017
Zoals ik al aangaf werkte het niet om land tussen [] te zetten -->
Wanneer ik in de query Land-id tussen [] zet geeft hij een "Data type mismatch in criteria expression., "
Bij mijn zoekresultaten kwam ik inderdaad ook tegen dat er dan waarschijnlijk een kolomnaam niet klopt. Maar wanneer ik de database bekijk bestaat er wel degelijk een kolom "Land-id"
Het zou misschien kunnen komen doordat er een " - " in de naam staat. Maar ik vind het te riskant om alle kolomnamen te verandere gezien er nog andere dingen draaien om de database.

Proud member of the Cosmic Cows


Acties:
  • 0 Henk 'm!

Anoniem: 62555

Staat er niet per ongeluk een spatie voor of achter die kolomnaam? (Dat heb ik ook wel eens gehad)

Acties:
  • 0 Henk 'm!

  • Theske
  • Registratie: Februari 2003
  • Laatst online: 14-05-2017
Nee, die staat er ook niet.
Is het niet mogelijk om op en bepaalde manier de kolomnaam te forceren??
MySQL heeft Backticks, PostgreSQL heeft dubbele quotes. Maar wat gebruik MS Access daar precies voor??
Als dit kan helpen teminste...

Proud member of the Cosmic Cows


Acties:
  • 0 Henk 'm!

  • ShadowLord
  • Registratie: Juli 2000
  • Laatst online: 06-05 07:53
Je forceert de kolonaam dus met blokhaken:
[List-id]

De quotes zijn NIET nodig voor een integer, maar mogen wel.

Heb je trouwnes ook ergens een var '$Land'? Want dan zou PHP kunnen lezen:
"SELECT Land FROM Land WHERE Land-id = '$Land_id' "

En niet het verwachte:
"SELECT Land FROM Land WHERE Land-id = '$Land_id' "

Dus daarom mijn query of die van SpartaRotterdam eens proberen. Die hebben het PHP var verwarrings probleem niet.

PS. Ik ben zelf toch al niet zo'n voorstander van vars in een string, omdat deze zich op 'onverwachte' manieren kunnen gedragen. Zeker als je met arrays aan het werken bent:
PHP:
1
"This is: $array["test"]"

You see things; and you say, "Why?" But I dream things that never were; and I say, "Why not?"


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-05 10:36

NMe

Quia Ego Sic Dico.

Anoniem: 62555 schreef op woensdag 31 augustus 2005 @ 11:50:
die quotes moeten zeker wel om $Land-id lijkt me (SQL Insertion) ... maar dat is ook de oplossing niet voor je probleem lijkt me.
Euh, als je quotes gebruikt om dat getal heen dan ga je echt geen SQL Injectie tegen hoor. Alles wat $land_id hoeft te bevatten is een quote, en dan heb je de poppen aan het dansen. Natuurlijk niet als je cast naar een int, maar als je dat doet krijg je voor elke ongeldige waarde 0 uit, wat ook weer onverwachte fouten op kan leveren.

Je kan dus beter van tevoren even checken wat er in $land_id staat, met behulp van is_int of is_numeric.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Theske
  • Registratie: Februari 2003
  • Laatst online: 14-05-2017
Okeej!! Hij doet het nu inderdaad wel met blokhaken en zonder quotes om de variabele in de query

PHP:
1
$qryLand = "SELECT * FROM Land WHERE [Land-id] = $Land_id";


Bedankt allemaal!! :)

Proud member of the Cosmic Cows

Pagina: 1