2010-10-26 14 views
1

Qu'est-ce qui causerait cela? Code suit:Pourquoi l'instruction PHP mysqli préparée fonctionne-t-elle mais insère toutes les valeurs NULL?

$m = new mysqli($host,$user,$pass,$db); 
if(mysqli_connect_errno()) die('Connect failed: ' . mysqli_connect_error()); 
$PrepSQL = "INSERT INTO Products (" . implode(',',$this->cols) . ") VALUES ("; 
$PrepSQL .= '?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 
$stmt = $m->prepare($PrepSQL); 
if(!$stmt) die('Could not prepare: ' . $m->error . "\n$PrepSQL\n"); 
$ret = $stmt->bind_param('isissssddssssssssssssssssssssssssisssssss', 
     $contents[0], ... bunch of these here ...); 
if(!$ret) die('bind_param failed: ' . $m->error); 

Puis dans une boucle que j'ai:

$contents = explode('|',$NL); // NL is pipe delimited data 
print_r($contents); 
if(!$stmt->execute()) die("Statement failed: " . $m->error); 

Et le script ne s'arrête pas, mais chaque valeur est NULL dans MySQL. La plupart des types sont des chaînes et je suppose qu'ils rempliraient au moins même si les types numériques sont faux. Le print_r imprime correctement les valeurs.

+3

La ligne 4 se termine par un caractère de citation incorrect. – Phil

+0

C'était une faute de frappe après la pâte quand j'essayais de formater. – Tim

+0

Etes-vous sûr que $ this-> cols' contient les noms de colonne corrects? – kijin

Répondre

0

Pouvez-vous afficher le code complet depuis la préparation de l'instruction jusqu'à son exécution?

Je suppose que $ contenu dans la première partie n'est pas le même $ contenu que dans la deuxième partie. Ils doivent être des références au même tableau, puisque vous le remplissez après l'avoir lié par référence.

+0

Je pense que vous avez raison. Mes compétences PHP sont très en retard. Faire la mission à nouveau faisait probablement autre chose. – Tim