2013-07-27 201 views
0

我正在做一次性數據導入(所以開銷不是問題)從一箇舊表到Wordpress註釋表。我遍歷舊錶,使用php調整新表的一些數據,然後執行每個插入。它只會插入第一行。如果我再次運行代碼,它會插入相同的第一行,所以我不認爲有主鍵問題。MySQL插入循環只插入一行

require('wp-config.php'); 

$con=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME); 

$result = mysqli_query($con,"SELECT * 
    FROM user_import u, wp_posts p, wp_postmeta m 
    WHERE p.ID = m.post_id 
    AND m.meta_key = 'fanfic_id' 
    AND m.meta_value = u.fanfic_id"); 

while($row = mysqli_fetch_array($result)) 
    { 
    $nick=$row['user_nickname']; 
    $ip=$row['user_ip_address']; 
    $date=strToTime($row['user_fanfic_date']); 
    $date2=strftime('%Y-%m-%d 12:00:00',$date); 
    $gmt=strftime('%Y-%m-%d 12:00:00', $date); 
    $datemine = date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $date))); 

    $fanfic_id=$row['fanfic_id']; 

    $getPostID="SELECT post_id FROM wp_postmeta WHERE meta_key='fanfic_id' and meta_value=$fanfic_id"; 

    $result2 = mysqli_query($con,$getPostID); 

    while($row2 = mysqli_fetch_array($result2)){ 
     $post_id=$row2['post_id']; 

    } 

    $review=$row['user_fanfic_review']; 
    $sql="INSERT INTO wp_comments(comment_approved, user_id, comment_post_id, comment_author, comment_author_ip, comment_date, comment_date_gmt, comment_content) 
     VALUES(1, 0, $post_id,'$nick','$ip', '$date2', '$gmt', '$review') "; 

    $result = mysqli_query($con,$sql); 

    } 

mysqli_close($con); 
+0

你爲什麼不使用wordpress數據庫對象'$ wpdb'? http://codex.wordpress.org/Class_Reference/wpdb – Konsole

+0

'$ getPostID'查詢是否返回多行?因爲你在循環中獲取結果,但每次都覆蓋相同的變量。 – Barmar

+0

我不知道那個對象。我得看看它。謝謝。 –

回答

3

我相信,因爲該行

$sql="INSERT INTO wp_comments(comment_approved, user_id, comment_post_id, comment_author, comment_author_ip, comment_date, comment_date_gmt, comment_content) 
    VALUES(1, 0, $post_id,'$nick','$ip', '$date2', '$gmt', '$review') "; 
$result = mysqli_query($con,$sql); // <--- this line. 

的既然你重新分配SELECT的$result到插入的結果。你能改變這條線嗎?

mysqli_query($con,$sql); 
+0

或者叫這個'$ result3',這樣你就可以測試它的成功。 – Barmar

+0

@Barmar,真的。但是,在他的代碼中,他沒有檢查它是否成功,所以我只是尋求最小代碼。 :D – invisal

+0

該值從不使用。除非在使用mysqli_query()的結果的循環中稍後添加更多代碼,否則應該將其更改爲invisal建議的內容。 – Landstander

0

問題的存在,在這一點上:

$getPostID="SELECT post_id FROM wp_postmeta WHERE meta_key='fanfic_id' and meta_value=$fanfic_id"; 

$result2 = mysqli_query($con,$getPostID); 

while($row2 = mysqli_fetch_array($result2)){ 
$post_id=$row2['post_id']; 
} 

你在做什麼總是讓循環內的相同post_id。這意味着每當第一個while循環while($row = mysqli_fetch_array($result))運行第二個時,獲取相同的數據並繼續插入操作。

P.S.考慮使用$wpdb對象進行wordpress數據庫操作http://codex.wordpress.org/Class_Reference/wpdb

+1

我打算髮表相同的答案,但我懷疑這個查詢只返回一行。我看到很多人習慣性地在循環中調用'fetch',即使對於唯一的查詢。這就是爲什麼我在發佈前在評論中詢問了上述內容。 – Barmar