2010-02-27 7 views
1

J'ai converti données de JSON tableau mais maintenant je voulais insérer dans ma base de données que je continue à recevoir Tableaucomment insérer un tableau converti en mysql? (Php)

ici est le code

for ($i=0; $i<=$checking; $i++) { 

    $catid = $ids[$i]; 
    $catname = $names[$i]; 
    $catapps = $apps[$i]; 
    $caturl = $iconurls[$i]; 

$query = "INSERT INTO cat VALUES ('".$catid."','".mysql_real_escape_string($catname)."','".$catapps."','".mysql_real_escape_string($caturl)."')"; 
mysql_query($query); 



}; 
+0

Pas besoin de me mentionner dans les questions suivantes, mais merci :) – Gordon

Répondre

0

Faire avec AOP et des déclarations préparées:

try { 

    // connect to the DB 
    $dbh = new PDO('mysql:host=localhost;dbname=my_db','user','password'); 

    // prepare the query : it will be faster and safer 
    $query = $dbh->prepare("INSERT INTO cat VALUES (id, name, app, url) VALUES (:id, :name, :app, :url)"); 


    // tell which vars will be used to fill the query 
    $query->bindParam(':id', $catid); 
    $query->bindParam(':name', $catname); 
    $query->bindParam(':app', $catapps); 
    $query->bindParam(':url', $caturl); 

    // execute your stuff 
    for ($i = 0; $i <= $checking; $i++) { 

     $catid = $ids[$i]; 
     $catname = $names[$i]; 
     $catapps = $apps[$i]; 
     $caturl = $iconurls[$i]; 

     $stmt->execute(); 

    }; 

} catch (PDOException $ e) {// gérer les erreurs de connexion }

$ dbh = NULL;

+0

Je ne suis pas d'accord avec cela, car il fait <$checking> voyages à la base de données, au lieu d'un voyage si vous composez l'ensemble de l'insertion dans une déclaration. – dar7yl

0

quelle colonne contient 'Array'? essayez de print_r ou var_dump$catid, $catname, $catapps et $caturl.

si vous avez 'Array' c'est probablement parce qu'au moins l'un d'entre eux est un tableau. lorsque php essaie de transformer un tableau en chaîne (par exemple en le concaténant avec une chaîne), il est transformé en chaîne 'Array'.

+0

hey là quand j'utilise var_dump je reçois rien dans ma base de données, et quand j'utilise print_r je reçois 1,1,1,1 seulement – Mahmoud

+0

print_r et var_dump, imprime leur argument. vous ne devriez pas utiliser la valeur de retour de print_r ou var_dump, c'est juste pour le débogage dans ce cas – Mathieu

0

Composez une seule requête en concaténant les valeurs. vis:
(avec un peu de reorg pour plus de clarté)

$query = "INSERT INTO cat VALUES "; 

for ($i=0; $i<=$checking; $i++) 
{ 
    if ($i > 0) 
     $query .= ','; 
    $catid = intval($ids[$i]); 
    $catname = mysql_real_escape_string($names[$i]); 
    $catapps = mysql_real_escape_string($apps[$i]); 
    $caturl = mysql_real_escape_string($iconurls[$i]); 
    $query .= "($catid, '$catname', '$catapps', '$caturl')"; 
} 
mysql_query($query); 
+0

-1. Suggérer à quiconque d'utiliser mysql_stuff_escape au lieu de PDO en 2010 n'aide pas. –

+0

Je ne suis pas d'accord. L'utilisation de l'AOP devrait être un choix, pas un impératif religieux. Dans ma défense, je gardais avec l'application originale des soumissionnaires, et en soulignant une réorganisation qui conduit à la clarté. – dar7yl

1

Je veux vous suggérer d'utiliser AdoDB pour faire une meilleure insertion des données/mise à jour dans MySQL. AdoDB faire un échappement automatique lorsque vous insérez/mise à jour en utilisant AutoExecute. Voici un exemple d'utilisation:

$catid = $ids[$i]; 
$catname = $names[$i]; 
$catapps = $apps[$i]; 
$caturl = $iconurls[$i]; 
//set table name 
$table_name = 'cat'; 
//set field values 
$data = array (
    'catid' => $catid, 
    'catname' => $catname, 
    'catapps' => $catapps, 
    'caturl' => $caturl 
); 
//do insert 
$result = $adodb->AutoExecute($table_name, $data, 'INSERT'); 

S'il vous plaît noter que la clé utilisée dans le tableau $data est le nom de la colonne dans la table cat dans MySQL, donc l'ajuster en fonction du nom de colonne dans votre base de données.

Si vous souhaitez insérer un tableau dans une colonne mysql, alors je vous suggère d'utiliser serialize lors de l'insertion, puis lors de l'extraction des données, utilisez unserialize avant de l'afficher ou de le traiter.

Questions connexes