Jump to content

Il insert que la derniere ligne dansla BD....


Recommended Posts

Bonjour,

 

J'ai crée une nouvelle table ou je souhaiterais ajouter des valeurs venant d'un select:

$sql3 = 'SELECT id_order_detail FROM ps_order_detail WHERE ps_order_detail.id_order="'.$_REQUEST['id_order'].'"';
  if ($results = Db::getInstance()->ExecuteS($sql3))
foreach ($results as $Value)
	    echo $Value['id_order_detail']."\n";

$detail = $Value['id_order_detail'];
$sql = Db::getInstance()->ExecuteS("INSERT INTO table VALUES('$detail','$id_customer','','','','','','','') ");

 

J'ai bien les deux valeurs représentant chacun une ligne qui s'affiche en echo mais il n'y a qu'une ligne qui s'insert, celle qui m'importe: '$detail' , aurais-je oublier quelques choses ?

 

Merci, d'avance,

Link to comment
Share on other sites

Oui.

 

$sql3 = 'SELECT id_order_detail FROM ps_order_detail WHERE ps_order_detail.id_order="'.$_REQUEST['id_order'].'"';
  if ($results = Db::getInstance()->ExecuteS($sql3))
foreach ($results as $Value)
{
                   echo $Value['id_order_detail']."\n";

$detail = $Value['id_order_detail'];
$sql = Db::getInstance()->ExecuteS("INSERT INTO table VALUES('$detail','$id_customer','','','','','','','') ");
}

Est-ce mieux, maintenant ?

Link to comment
Share on other sites

Bonjour,

 

Si c'est résolu, vous devez mettre le tag RÉSOLU dans le titre.

 

Mais je ne poste pas pour ça :

 

$sql = Db::getInstance()->ExecuteS("INSERT INTO table VALUES('$detail','$id_customer','','','','','','','') ");

 

Ce genre de syntaxe est à éviter. Premièrement, vous avez des paramètres inutiles... (les 7 derniers, si j'ai bien compté). De plus, vous ne définissez pas un lien entre le paramètre et son champ. Du coup, difficile de comprendre quoi que ce soit.

 

$sql = Db::getInstance()->ExecuteS("INSERT INTO table(`champ_detail`, `id_customer`) VALUES('$detail','$id_customer') ");

 

C'est un peu plus parlant et plus propre. On définit d'abords les champs qu'on va remplir ("champ_detail" et "id_customer") et on leur assigne des valeurs. Les autres champs n'ayant aucune assignation, auront une valeur par défaut (les champs VARCHAR n'auront rien, les champs INT auront 0, etc.).

 

Edit: ah oui, et pour une question de sécurité, il ne faut pas oublier de mettre des cast pour les valeurs numériques et utiliser la fonction "pSQL" de Prestashop pour protéger vos variables.

 

$sql = Db::getInstance()->ExecuteS("INSERT INTO table(`champ_detail`, `id_customer`) VALUES('" . pSQL($detail) . "','" . (int)$id_customer . "')");

Link to comment
Share on other sites

D'accord avec Sbizz, je rajouterai qu'il serait bon aussi d'éviter des INSERT dans une boucle.

 

Mieux vaut faire un seul INSERT histoire de soulager un peu le SGBD.

 

$insert = '';
foreach ($results as $Value)
{  
$insert .= '("'. pSQL($Value['id_order_detail']) .'", '. (int)$id_customer .'),';
}

$sql = Db::getInstance()->ExecuteS("INSERT INTO table(`champ_detail`, `id_customer`) VALUES " . substr($insert, 0, -1) );


 

Un détail, mais c'est avec tous ces petits détails qu'on améliore la rapidité de sa boutique :).

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...