繁体   English   中英

PHP foreach循环仅将部分记录插入mysql表

[英]Php foreach loop inserts only part of records into mysql table

在我的mysql数据库中,我仅获得ID为26、16、17、18、19、22、23、24的记录。为什么那样,我的代码中有任何错误? 我没有线索,请帮助:(

<?
$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

检查查询实际上是否可以执行。

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";
  }
}

这可能应该是一条评论,但时间太长了。 如果您运行类似的程序并出现错误,请编辑原始问题以反映您的发现。 如果您还对此答案发表评论,我可以尝试编辑此答案以解决您的问题。

对于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()解析,并返回一个安全友好的错误消息,该消息不会透露太多有关基础数据库系统或执行的查询的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM