[PHP5 - MySQLi] Bind_param probleem

Pagina: 1
Acties:
  • 121 views sinds 30-01-2008
  • Reageer

  • TrafeX
  • Registratie: Maart 2003
  • Laatst online: 27-11-2025

TrafeX

Tuned for life!

Topicstarter
Ik zit met een probleem.
Ik ben een mysql connectie klasse aan het maken met PHP 5 en MySQLi
Nu zit ik met een vervelend probleem.

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
36
37
38
39
40
41
42
<?php
$mysqli = new mysqli("localhost", "***", "***", "***");

/* check connection */
if (mysqli_connect_errno()) {
   printf("Connect failed: %s\n", mysqli_connect_error());
   exit();
}

$user_id = 1;

/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT username FROM pm_users WHERE user_id = ?")) {

   /* bind parameters for markers */
   $stmt->bind_param('i', $user_id);

   printf("1 Error: %d: %s <br />SQL: %s<br />\n",$stmt->errno, $stmt->error, $stmt->sqlstate);
    /* execute query */
    $stmt->execute();
    printf("2 Error: %d: %s <br />SQL: %s<br />\n",$stmt->errno, $stmt->error, $stmt->sqlstate);
   /* bind result variables */
   //$stmt->bind_result($district);   

   /* fetch value */
   $stmt->fetch();

    //printf("%s is in district %s\n", $user_id, $district);

   /* close statement */
   $stmt->close();
   printf("3 Error: %d: %s <br />SQL: %s<br />\n",$stmt->errno, $stmt->error, $stmt->sqlstate);
}
else
{
    print("4 ERROR!");
    printf("Error: %d: %s <br />SQL: %s<br />\n",$stmt->errno, $stmt->error, $stmt->sqlstate);
}
/* close connection */
$mysqli->close();
printf("5 Error: %d: %s <br />SQL: %s<br />\n",$stmt->errno, $stmt->error, $stmt->sqlstate);
?> 


DIt voorbeeld is bijna rechtstreeks overgenomen van php.net.
Maar het werkt niet, ik krijg de volgende error:

code:
1
2
3
4
5
6
7
8
9
Warning: mysqli_stmt::bind_param() [function.bind-param]: Number of variables doesn't match number of parameters in prepared statement in /home/projects/pacman/_public_html/test.php on line 16
1 Error: 0:
SQL:
2 Error: 2031: No data supplied for parameters in prepared statement
SQL: HY000
3 Error: 0:
SQL:
5 Error: 0:
SQL:


Het probleem zit hem in bind_param.
Ik heb werkelijk alles al geprobeerd, heel internet afgezocht, php handleiding, php nieuwsgroepen, php chatkanalen enz.

Ik heb het geprobeerd met PHP 5.0.2 en nu met PHP 5.0.3 RC1

Is dit mischien een bug?
Ik ben opzoek naar iemand die dit weleens werkend heeft gehad en hier ervaring mee heeft.
Wie kan mij helpen?

Als jullie meer informatie willen dan hoor ik het wel

(Ik heb geen online voorbeeld want php 5 draait alleen intern)

[ Voor 10% gewijzigd door TrafeX op 09-12-2004 10:39 ]

TrafeX.nl - Clipboard.ninja


  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 26-04-2024
code:
1
No data supplied for parameters in prepared statement
Bevat $user_id wel een correcte waarde :?

  • TrafeX
  • Registratie: Maart 2003
  • Laatst online: 27-11-2025

TrafeX

Tuned for life!

Topicstarter
Ja het veld is een int en user_id 1 bestaat.
Ik heb het ook op andere tabellen geprobeerd maar echt niks wil lukken.
Maar die error komt omdat het al fout gaat bij bind_param, daardoor is WHERE user = ?
leeg.

TrafeX.nl - Clipboard.ninja


  • TrafeX
  • Registratie: Maart 2003
  • Laatst online: 27-11-2025

TrafeX

Tuned for life!

Topicstarter
Ik heb het als bug report opgegeven bij php.net:
http://bugs.php.net/bug.php?id=31037

Dit test script:

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
<?php 
 
$mysql = new mysqli("localhost", "****", "****", "test");
 
printf("Client version: %s\n", $mysql->client_version); 
printf("Server version: %s\n", $mysql->server_version); 
 
$mysql->query("DROP TABLE IF EXISTS temp_table"); 
 
$mysql->query("CREATE TABLE temp_table(username varchar(20), user_id
int)"); 
$mysql->query("INSERT INTO temp_table VALUES ('foo', 1)"); 
 
if ($stmt = $mysql->prepare("SELECT username FROM temp_table WHERE
user_id = ?")) 
{ 
    $stmt->bind_param('i', $user_id);
    $user_id = 1; 
  
    $stmt->execute(); 
     
    $stmt->bind_result($name); 
    $stmt->fetch(); 
 
    printf("Name: %s\n", $name); 
    $stmt->close(); 
} 
 
$mysql->close(); 
?>



Geeft dus:

code:
1
2
3
4
5
Client version: 40107 Server version: 40107
Warning: mysqli_stmt::bind_param() [function.bind-param]: Number of
variables doesn't match number of parameters in prepared statement in
/home/projects/pacman/_public_html/test.php on line 16
Name:


Hier is het online voorbeeld:
http://testing.4worx.com/test.php

En de phpinfo():
http://testing.4worx.com/phpinfo.php

TrafeX.nl - Clipboard.ninja


  • Postman
  • Registratie: Februari 2000
  • Laatst online: 08-02 20:25
bind_param verwacht meer of minder variabelen dan dat jij nu mee geeft. Hoeveel meer of minder kan ik zo niet zeggen, dat zul je zelf ff moeten uitzoeken.

  • xander88
  • Registratie: September 2003
  • Laatst online: 05-10-2025
Even gechecked en het lijkt idd een bug te zijn.

[ Voor 76% gewijzigd door xander88 op 09-12-2004 12:55 ]


  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

lama.... |:(

[ Voor 94% gewijzigd door Brakkie op 09-12-2004 12:44 ]

Systeem | Strava


  • TrafeX
  • Registratie: Maart 2003
  • Laatst online: 27-11-2025

TrafeX

Tuned for life!

Topicstarter
Postman schreef op donderdag 09 december 2004 @ 12:40:
bind_param verwacht meer of minder variabelen dan dat jij nu mee geeft. Hoeveel meer of minder kan ik zo niet zeggen, dat zul je zelf ff moeten uitzoeken.
Kijk eens goed naar de code ;)

TrafeX.nl - Clipboard.ninja


  • TrafeX
  • Registratie: Maart 2003
  • Laatst online: 27-11-2025

TrafeX

Tuned for life!

Topicstarter
xander88 schreef op donderdag 09 december 2004 @ 12:42:
Even gechecked en het lijkt idd een bug te zijn.
Heb je het zelf getest?
Zo ja met welke PHP versie en MySQL versie?

TrafeX.nl - Clipboard.ninja


  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 26-04-2024
Wat gebeurt er als je het op de niet OOP manier probeert :? Werkt het dan wel :?

[ Voor 56% gewijzigd door ludo op 09-12-2004 15:30 ]


  • TrafeX
  • Registratie: Maart 2003
  • Laatst online: 27-11-2025

TrafeX

Tuned for life!

Topicstarter
Als ik het op de Procedural manier doe krijg ik hetzelfde

[ Voor 28% gewijzigd door TrafeX op 09-12-2004 15:39 ]

TrafeX.nl - Clipboard.ninja


  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 26-04-2024
TrafeX schreef op donderdag 09 december 2004 @ 15:39:
Als ik het op de Procedural manier doe krijg ik hetzelfde
Ik heb het even geprobeerd op mijn dev-server met PHP5.0.2, ik krijg geen errors en de volgende output met jouw test-scriptje:
code:
1
Client version: 40103 Server version: 40107 Name: foo

Dus die code is in ieder geval correct, en php heeft er bij mij dus geen moeite mee. Welke versie van MySQL gebruik je :? Toch wel >= 4.1 B)

  • TrafeX
  • Registratie: Maart 2003
  • Laatst online: 27-11-2025

TrafeX

Tuned for life!

Topicstarter
ludo schreef op donderdag 09 december 2004 @ 20:13:
[...]
Ik heb het even geprobeerd op mijn dev-server met PHP5.0.2, ik krijg geen errors en de volgende output met jouw test-scriptje:
code:
1
Client version: 40103 Server version: 40107 Name: foo

Dus die code is in ieder geval correct, en php heeft er bij mij dus geen moeite mee. Welke versie van MySQL gebruik je :? Toch wel >= 4.1 B)
Ik kreeg dit eruit:

code:
1
2
3
4
5
Client version: 40107 Server version: 40107
Warning: mysqli_stmt::bind_param() [function.bind-param]: Number of
variables doesn't match number of parameters in prepared statement in
/home/projects/pacman/_public_html/test.php on line 16
Name:


Dus MySQL 4.1.7
Raar dat het bij jou wel goed gaat, ik wacht nog ff op antwoord op me bugreport

TrafeX.nl - Clipboard.ninja


  • TrafeX
  • Registratie: Maart 2003
  • Laatst online: 27-11-2025

TrafeX

Tuned for life!

Topicstarter
*Kickje*

Sorry voor de kick maar nog steeds is het probleem niet opgelost.
Ondertussen draai ik de final versie van PHP 5.0.3 en MySQL 4.1.8
Op het bug report heb ik ook nog steeds geen anwtoord gehad.

Heeft er iemand nog ideeen waar het aan kan liggen?
Of meer mensen met dit probleem?

[ Voor 19% gewijzigd door TrafeX op 17-12-2004 16:09 ]

TrafeX.nl - Clipboard.ninja


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Excuus voor het omhoog schoppen van een heel oud topic, maar ik heb precies dit probleem. Ik heb het bug report gecheckt en de raad daarin opgevolgd:

1. met de standaard libmysql.dll van php (client API versie 4.1.7) krijg ik de genoemde foutmelding
2. als ik de libmysql en ext/php_mysqli.dll van dev.mysql.com download en die van php vervang, krijg ik ook de foutmelding
Warning: mysqli_stmt::bind_param() [function.bind-param]: Number of variables doesn't match number of parameters in prepared statement in...
Ik heb een Singleton class gemaakt die een mysqli connection levert: er wordt dus slechts 1 connectie gebruikt tijdens een script run. Maar ik kan me niet voorstellen dat het niet mogelijk is meerdere statements op 1 connectie los te laten.

PHP versie: 5.1.2.
OS: Windows XP
MySQL Server versie: 5.0.18-nt
Client API versie: 5.0.18 (de versie van mysql.com)

Een search op google levert geen oplossing een en search op dit forum levert alleen dit topic.

stukje voorbeeld code:

PHP:
1
2
3
4
5
$id = 1;
$oConnection = Db::getInstance()->getConnection());
$stmt = $oConnection->stmt_init();
$stmt->prepare("SELECT * FROM mytable WHERE id=?");
$stmt->bind_param("i", $id); // op deze regel gaat het fout


Op dit punt in de code zijn er al vaker statements gedraaid op dezelfde connectie ($oConnection).

Wat doe ik verkeerd?

[ Voor 23% gewijzigd door Explore op 01-04-2006 18:26 ]

[ specs ] [ Tweaker gallery ]


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Bij mij loste een $stmt->store_result() het probleem op.

[ specs ] [ Tweaker gallery ]

Pagina: 1