2010-11-15 6 views
0

ici mon code-comment insérer tableau de données dans la base de données

$things = mysql_real_escape_string(implode(',', $_POST['things']),$link); 

$q = "INSERT INTO tblslider(src) VALUES ('".$things."')"; 
print_r($q); 
$result = $mysqli->query($q) or die(mysqli_error($mysqli)); 

mais ma requête obtient généré INSERT INTO tblslider(src) VALUES ('4368122.jpg,5440051.jpg,1047428.jpg') mais il devrait être INSERT INTO tblslider(src) VALUES ('4368122.jpg'),('5440051.jpg'),('1047428.jpg') c'est pourquoi il prend comme un enregistrement non trois.

Répondre

5

Vous pouvez faire:

$things = array_map('mysql_real_escape_string', $_POST['things']); 
$q = "INSERT INTO tblslider(src) VALUES ('". implode("'),('", $things)."')"; 

Il génère (avec mes données de test):

INSERT INTO tblslider(src) VALUES ('a.jpg'),('b.jpg'),('c.jpg') 

J'ai oublié: utiliser uniquement des fonctions telles que mysql_real_escape_string sur les réelles données, pas la chaîne SQL . Dans votre exemple, vous appliquez la fonction sur les données déjà concaténées.

+0

Jio simple lal ... – ppp

+0

@ppp: Je ne comprends pas, mais j'espère que cela veut dire merci;) –

+0

cela signifie mec cool ... – ppp

0

essayez ceci:

$formatVals = function($x){$rx = mysql_real_escape_string($x); return "('$rx')";}; 

$valString = implode(',', array_map($formatVals, $_POST['things']); 

$sql = "INSERT INTO tblslider (src) VALUES $valString"; 
+0

Vous avez besoin PHP 5.3 pour ça, n'est-ce pas? –

+0

non pas pour array_map, pour la fonction anonyme peut-être vous auriez besoin de create_function au lieu de ce que j'ai fait, mais cela peut encore être fait http://php.net/manual/fr/function.array-map.php http://us.php.net/manual/fr/function.create-function.php http://php.net/manual/fr/functions.anonymous.php –

+0

Plus important encore, j'ai oublié les parens –

0

Vous avez implosé ce qui est maintenant un tableau, vous devez itérer sur cela avec une boucle de foreach tels que ...

foreach ($things as $item) { 

    $q = "INSERT INTO tblslider(src) VALUES ('".$item."')"; 
    echo '<br />'.$q; 
    $result = $mysqli->query($q) or die(mysqli_error($mysqli)); 

} 

Vous pouvez faire écho $ q pour vous assurer que les requêtes sont correctes pour chaque élément.

+0

Mais cela fait trois appels DB .... et '$ choses' n'est pas un tableau, c'est une chaîne. –

+0

Oups, mon erreur. Que diriez-vous d'utiliser str_replace $ things = str_replace (',' '), (', $ choses); – user466764

Questions connexes