que quelqu'un peut me aider à voir ce qui se passe mal avec cette configurationabstraction de base de données pdo
Je construis la requête @sql dans la fonction ci-dessous comme celui-ci. Les guillemets supplémentaires sont configurés dans le tableau de conditions.
$sql .= " WHERE $field = \"$value\"";
La fonction de mise à jour pdo boucle le tableau de conditions comme ceci.
if (!is_null($conditions))
{
$cond = ' WHERE';
$obj = new CachingIterator(new ArrayIterator($conditions));
foreach($obj as $k=>$v)
{
$cond .= " $k=$v";
$cond .= $obj->hasNext() ? ' AND' : '';
}
}
Mon point de faire est que je ne peux pas construire des tableaux avec des valeurs sans ajouter des barres obliques pour des guillemets autour des valeurs. Sinon, l'erreur sql lancée est une colonne inconnue.
Y at-il autre chose que je peux faire?
Est-ce que quelqu'un pourrait me donner des commentaires à ce sujet?
modifier: le reste de la fonction de mise à jour
Où pourrais-je lier les valeurs du tableau des conditions et les ont exécutés aussi? Comme je le vois maintenant, seul le tableau de valeurs est exécuté? Ai-je besoin de mettre en boucle les deux tableaux, puis de fusionner les deux tableaux?
$obj = new CachingIterator(new ArrayIterator($values));
$db = db::getInstance();
$sql = "UPDATE $table SET \n";
foreach($obj as $field=>$val)
{
$sql .= "$field= :$field";
$sql .= $obj->hasNext() ? ',' : '';
$sql .= "\n";
}
$sql .= $cond ;
$stmt = $db->prepare($sql);
// bind de params
foreach($values as $k=>$v)
{
$stmt->bindParam(':'.$k, $v);
}
$stmt->execute($values);
merci, Richard
Merci, c'est utile, je construisais déjà 4 boucles dans une fonction, parce que je ne suis pas trop familier avec cela. Je dois regarder de plus près cependant. – Richard
Vous pouvez resserrer votre code en utilisant 'array_map()' et 'join()' à la place de toutes ces boucles. –
Merci, vous étiez plus rapide, je n'ai jamais utilisé ces fonctions, donc je vais jeter un oeil à cela aussi – Richard