J'utilise une classe de base de données dynamique que j'ai construite pour tous mes projets. Je viens de commencer avec un nouveau, et la classe me pose un problème. Voici mon code, pas les détails. Mais j'ai recréé l'erreur à travers un code minimal.
function vref($arr) {
if (strnatcmp(phpversion(),'5.3') >= 0) {//La référence est requise pour PHP 5.3+
$refs = array();
foreach($arr as $key => $value) $refs[$key] = &$arr[$key];
return $refs;
}
return $arr;
}
$bind = 's,i,i,i,i, i,s,s,s,s, i,s,s';
$reward = ( $data['reward'] ) ? $data['reward'] : '0';
$special = '0';
$icon = '0';
$mastery = ( @$data['mastery'] ) ? 'Oui' : 'Non';
$added = time();
settype($added, 'string')
$arr = array(
$bind,
$data['name'],
intval($data['cost']),
intval($data['per']),
intval($data['serv']),
intval($data['earns']),
intval($data['cp']),
$data['cookTime'],
$reward,
$special,
$icon,
intval($data['type']),
$mastery,
$added );
$db = new mysqli(...);
$stmt = $db2->prepare('INSERT INTO recipe2 (
`name`,cost,perserv,servings,earns,
cp,cooktime,`unlock`,special,icon,
`type`,options,added)
VALUES (?,?,?,?,?, ?,?,?,?,?, ?,?,?) ');
call_user_func_array( array( $stmt, 'bind_param' ), vref($arr) );
// var_dump($arr)
array(14) {
[0]=> string(25) "s,i,i,i,i,i,s,s,s,s,i,s,s"
[1]=> string(18) "Bacon Cheeseburger"
[2]=> int(15)
[3]=> int(4)
[4]=> int(13)
[5]=> int(56)
[6]=> int(6)
[7]=> string(2) "5m"
[8]=> string(1) "0"
[9]=> string(1) "0"
[10]=>int(0)
[11]=>int(0)
[12]=>string(2) "No"
[13]=>string(10) "1325300795"
}
// Liste des colonnes de la base de données
name varchar(255)
cost int(10)
perserv int(5)
servings int(10)
earns int(10)
cp int(10)
cooktime varchar(11)
unlock varchar(255)
special varchar(255)
icon varchar(255)
type int(5)
options varchar(255)
added varchar(12)
Erreur: Attention: mysqli_stmt::bind_param(): Le nombre d'éléments dans la chaîne de définition du type ne correspond pas au nombre de variables à lier
Et avant que quelqu'un ne dise simplement, comptez vos variables. Je l'ai fait. Probablement plus de 50 fois maintenant. Pas une blague. Il y a une heure, j'ai commencé à utiliser les variables au lieu que les données soient directement mises dans. vref() passe simplement tous les éléments du tableau en tant que variables de référence. J'ai depuis appris que les références ne doivent pas être prises à la légère. Heh. Mais je ne peux toujours pas comprendre cela, c'est frustrant.
J'ai 13 colonnes. 14 paramètres passés à bind_param().