MySQLi- und gebundene Anweisungen, 2031: Keine Daten für Parameter in der AnweisungPhp

PHP-Programmierer chatten hier
Anonymous
 MySQLi- und gebundene Anweisungen, 2031: Keine Daten für Parameter in der Anweisung

Post by Anonymous »

Hier ist mein Code, der nicht funktioniert, ich weiß nicht warum:

Code: Select all

$sql = `INSERT INTO `_translations` (id, module, item_id, name_id, output, language) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE output = ?`
$stmt = mysqli_prepare($this->connection, $sql);
$params = array($stmt, $types);
foreach($array as $k=>&$v){
$params[] =& $v;
}
// this call is update call, therefore parameters are merged
if($update && $_update) $params = array_merge($params, $_update);
call_user_func_array('mysqli_stmt_bind_param', $params); # i think the [url=viewtopic.php?t=26065]problem[/url] is in this line..
if(mysqli_stmt_execute($stmt)){
if($this->transaction){ $this->affected++; }
else{ $this->affected = 1; }
}else{
$error = mysqli_stmt_error($stmt);
$errno = mysqli_stmt_errno($stmt);
die("{$sql}
".var_export($params, true)."
{$errno}: {$error}");
}

Code: Select all

die()
ergibt:

Code: Select all

INSERT INTO `_translations` (id, module, item_id, name_id, output, language) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE output = ?
array (
0 =>
mysqli_stmt::__set_state(array(
'affected_rows' => NULL,
'insert_id' => NULL,
'num_rows' => NULL,
'param_count' => NULL,
'field_count' => NULL,
'errno' => NULL,
'error' => NULL,
'sqlstate' => NULL,
'id' => NULL,
)),
1 => 'isissss',
2 => '',
3 => 'seo',
4 => '',
5 => 'keywords',
6 => 'tesoutput',
7 => 'en',
8 => 'tesoutput',
)

2031: No data supplied for parameters in prepared statement
Nun, die Typanzahl entspricht den Parametern und alles sollte gut funktionieren, aber das ist nicht der Fall. Da dieselbe Funktion für einfache Einfügungen ausgeführt wird, weiß ich, dass sie funktioniert ... Wenn von meiner Seite weitere Daten benötigt werden, fragen Sie einfach nach.

Irgendwelche Lösungen?

Vielen Dank im Voraus!

UPDATE #1:

Hier sind $array, $types und $update print Outs.

P.S. Es gibt eine Kette, bevor jede dieser drei Variablen festgelegt wird, aber sie enthalten genau das, was benötigt wird!

Code: Select all

// $array
array(6) {
["id"]=>
string(0) ""
["module"]=>
string(3) "seo"
["item_id"]=>
string(0) ""
["name_id"]=>
string(8) "keywords"
["output"]=>
string(9) "tesoutput"
["language"]=>
string(2) "en"
}
// $types
string(7) "isissss"
// $update
array(1) {
[0]=>
string(9) "tesoutput"
}
Ich habe bereits gedacht, dass das Problem darin liegen könnte, dass $types string keine $array-Werttypen verarbeitet, da dort alle Werte Strings sind. Ich bin mir jedoch nicht sicher, denn beim Einfügen ohne Update funktioniert es, auch wenn es sich um Zeichenfolgen handelt.

UPDATE #2:

Es sieht so aus, als ob es sich um einen versionbezogenen Fehler handelt, einen Treiberfehler – http://bugs.php.net/bug.php?id=43568 ... Irgendjemand hat es geschafft, dies mit > 5.2 zum Laufen zu bringen mysqlnd? Und ja, hier auf localhost verwende ich 5.2.6 mit dem Standard-MySQL-Treiber, während auf dem Produktionsserver PHP Version 5.3.5 mit MySQL ausführt.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post