2010-02-27 44 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