2010-02-27 94 views
1

我已经转换一个JSON数据阵列,但现在我想将其插入到我的数据库,我不断收到阵列如何将转换后的数组插入到mysql? (PHP)

这里是代码

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

没有必要在后面的问题中提到我,但谢谢:) – Gordon 2010-02-27 14:42:37

回答

0

与PDO和准备语句做它:

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(); 

    }; 

} 赶上(PDOException $ E){// 处理连接错误 }

$胸径= NULL;

+0

我不同意这一点,因为它使<$checking>旅行到数据库,而不是一次旅行,如果你在一个语句构成整个插入。 – dar7yl 2010-03-01 12:38:12

0

哪一列包含'Array'? 尝试print_rvar_dump$catid,$catname,$catapps$caturl

如果你有'Array'这可能是因为它们中至少有一个是数组。当php尝试将一个数组转换为一个字符串时(例如,当用一个字符串卡住它时),它将被转换为字符串'Array'

+0

嘿那里当我使用var_dump我什么都没有进入我的数据库,当我使用print_r我得到1,1,1,1只有 – Mahmoud 2010-02-27 01:51:09

+0

print_r和var_dump,打印他们的论点。你不应该使用print_r或var_dump的返回值,它只是用于调试目的,在这种情况下 – Mathieu 2010-02-27 18:21:49

0

通过连接值组合一个查询。可见:
(有位REORG为了清楚)

$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。建议任何人在2010年使用mysql_stuff_escape而不是PDO是没有帮助的。 – 2010-02-27 14:49:59

+0

我不同意。使用PDO应该是一种选择,而不是宗教上的必要。 在我的辩护中,我与提交者原始申请保持一致,并指出导致澄清的重组。 – dar7yl 2010-02-27 21:05:55

1

我想建议你使用AdoDB做一个更好的插入/更新数据到MySQL。当您使用AutoExecute插入/更新时,AdoDB会自动转义。下面是一个使用示例:

$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'); 

请注意,在$data阵列中使用的关键是在MySQL中cat表中的列名,所以要根据您的数据库中列名进行调整。

如果你想插入一个数组到mysql列,那么我建议你在插入时使用serialize,然后在获取数据时,在显示或处理它之前使用unserialize