2011-07-31 137 views
1

在我的mysql數據庫中,我只獲得了id爲26,16,17,18,19,22,23,24的記錄。爲什麼會有這樣的錯誤我的代碼?我不;噸有任何線索,請幫助:(PHP Foreach循環只將部分記錄插入到MySQL表中

<? 
$connect = mysql_connect('localhost', 'dbname', 'pass'); 
if (!$connect) { die('Could not connect: ' . mysql_error()); } 
mysql_select_db("dbname") or die(mysql_error()); 

mysql_query("TRUNCATE TABLE anchors"); 

$blog_ids = array(
'anchor 1' => '1', 
'anchor 2' => '2', 
'anchor 3' => '3', 
'anchor 2' => '4', 
'anchor 2' => '5', 
'anchor 4' => '6', 
'anchor 5' => '7', 
'anchor 6' => '8', 
'anchor 7' => '9', 
'anchor 8' => '10', 
'anchor 9' => '13', 
'anchor 10' => '14', 
'anchor 11' => '16', 
'anchor 12' => '17', 
'anchor 13' => '18', 
'anchor 14' => '20', 
'anchor 15' => '21', 
'anchor 16' => '22', 
'anchor 17' => '23', 
'anchor 18' => '24', 
'anchor 19' => '25', 
'anchor 20' => '26' 
); 
foreach($blog_ids as $anchor => $blog_id){ 
$anchor_url = 'http://www.site.com'; 
mysql_query("INSERT INTO anchors (blog_id, anchor_url, anchor) VALUES ('$blog_id', '$anchor_url', '$anchor')"); 
} 

mysql_close($connect); 
?> 

泰非常多,這裏是表結構:

CREATE TABLE `anchors` (
`id` int(11) NOT NULL auto_increment, 
`blog_id` text, 
`anchor_url` text, 
`anchor` text, 
PRIMARY KEY (`id`), 
FULLTEXT KEY `posttitle` (`blog_id`,`anchor_url`,`anchor`) 
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 
+1

爲了上帝的愛,不要用所有這些查詢來殺死你的數據庫。創建一個包含所有數據('INSERT INTO tbl(x,y)VALUES((x1,y1),(x2,y2),(...))'的大型組合INSERT語句,或至少使用準備好的陳述 – kba

+0

你好克里斯蒂安,我是一個新手,你說不要使用foreach循環嗎?非常好 – webmasters

+0

是的,它相當於將一堆紙從一張表移動到另一張表,而不是一次一頁 – kba

回答

0

檢查是否查詢實際上可以被執行

if (mysql_query("INSERT INTO anchors (blog_id, anchor_url, anchor) VALUES ('$blog_id', '$anchor_url', '$anchor')") === FALSE) { 
    echo 'failed: ' . mysql_error() . "\n"; 
} 

此外,什麼樣的表結構像?SHOW CREATE TABLE anchors;會幫助你。如果你有一個唯一的或主鍵集合,這個值真的需要是唯一的,並且重複失敗並且有錯誤。

編輯:問題不在腳本內,而是在數據內。爲了在PHP中獲得數據,存儲需要進行調整。

$blog_ids = array(
    array(
    'anchor' => 'anchor 1', 
    'blog_id' => '1' 
), 
    array(
    'anchor' => 'anchor 2', 
    'blog_id' => '2' 
), 
    … 
); 

foreach ($blog_ids as $blog_id_array) { 
    $blog_id = $blog_id_array['blog_id']; 
    $anchor = $blog_id_array['anchor']; 
    $anchor_url = 'http://www.site.com'; 

    if (mysql_query("INSERT INTO anchors (blog_id, anchor_url, anchor) VALUES ('$blog_id', '$anchor_url', '$anchor')") === FALSE) { 
    echo 'failed: ' . mysql_error() . "\n"; 
    } 
} 
+0

您好,CREATE TABLE'anchors'( 'id' int(11)NOT NULL auto_increment, 'blog_id' text, 'anchor_url' text, '錨文本, PRIMARY KEY('id'), FULLTEXT KEY'posttitle'('blog_id','anchor_url','anchor') )ENGINE = MyISAM AUTO_INCREMENT = 10 DEFAULT CHARSET = utf 8 – webmasters

+0

迄今爲止看起來很好。你從mysql_error()得到了什麼輸出?有沒有查詢失敗? – Shi

+0

沒有錯誤,這真是奇怪:(這很奇怪,在我的表中,最後一個foreach值是第一個。 – webmasters

0

這應該可能是一個評論,但它有點太長。如果你運行這樣的東西並得到錯誤,編輯你的原始問題以反映你找到的東西。如果您還對此答案發表評論,我可以嘗試編輯此答案以解決您的問題。

對於INSERT語句,mysql_query()返回錯誤碼FALSE。您應該檢查是否存在任何錯誤。我會編輯代碼看起來更像這樣:

$result = mysql_query("INSERT INTO anchors (blog_id, anchor_url, anchor) VALUES ('$blog_id', '$anchor_url', '$anchor')"); 

if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

部署,我不一定會die(),但錯誤記錄到一些報告機制或通過mysql_error()解析,並返回那並不是一個安全,友好的錯誤消息不會透露太多關於底層數據庫系統或執行的查詢。