【问题标题】:Insert Data into Mysql from PHP from a nested foreach loop从嵌套的 foreach 循环将数据从 PHP 插入 Mysql
【发布时间】:2014-03-21 11:20:59
【问题描述】:

我正在尝试将从 json 获取的数据输入到数据库中。我已将数据作为多维数组获取,并使用 foreach 循环遍历数组。

我正在尝试将此数据插入 mysql 数据库,但我不断收到错误错误:字段“摘要”没有默认值

我的数据库表在名为 tracking 的数据库中称为文章,并具有以下字段:article_id、url、域、favicon、标题、摘要、喜欢、推文、plusones、图像、类别

我的php文件名为json_parser.php,如下

<?php
define('DB_NAME', 'tracking');
define('DB_USER', 'xxxxxxxxxxx');
define('DB_PASSWORD', 'xxxxxxxxx');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!$link){
    die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db(DB_NAME, $link);

if(!$db_selected){
    die('Cannot use '. DB_NAME . ': ' .mysql_error());
}

$url = "http://digitalrand.net/api/url_data/?key=abacus&pass=aba123cuxza%";
$json = file_get_contents($url);
$obj = json_decode($json, true);

foreach($obj as $article_array){

    $url = $article_array['url'];
    $domain = $article_array['domain'];
    $favicon = $article_array['favicon'];
    $title = $article_array['title'];
    $category = $article_array['category'];
    echo $category . "<br>";
    echo $domain . "<br>";
    echo $favicon . "<br>";
    echo $title . "<br>";
    echo $url . "<br>";

    $sql = 'INSERT INTO articles '.
               '(url, domain, favicon, title) '.
               'VALUES ( "$url", "$domain","$favicon","$title" )';
    if (mysql_query($sql)){
        echo "success.......";
    }


    if(!mysql_query($sql)){
       die('Error: ' . mysql_error());
    }

    $large_summary = $article_array['summary'];
    foreach ($large_summary as $summary){
        mysql_query("INSERT INTO articles(summary) VALUES('$summary')");
        echo "$summary <br>";
    }
    $images = $article_array['images'];
    foreach ($images as $image){        
        $image_first= reset($image);
        echo $image_first;
        mysql_query("INSERT INTO articles(image) VALUES($image_first)");
        echo "<img src=$image_first>";
    }
    $social_shares = $article_array['social_shares'];

    foreach($social_shares as $social_share=>$include){
        echo $social_share . ": " . $include . "<br>";
    }

    $entities = $article_array["entities"];

    foreach($entities as $entity_cat=>$entities_arr){
        foreach($entities_arr as $key=>$entity){
            echo $entity_cat.' >> '.$entity. "<br>";
        } 
    }
}   

?>

如何循环遍历数组项并将它们显示在适当的字段中

【问题讨论】:

  • summary 的数据类型是什么,看起来它设置为 NOT NULL,所以将其设为 NULL。
  • 我已经尝试删除该列并重新插入它,但它默认设置为 null,即 ALTER TABLE articles ADD summary TEXT NOT NULL ;跨度>
  • 您真的不想插入没有摘要但有url, domain, favicon, title 的行和另一个有summaryimage 但没有其他字段的行吗?因为这是你在做的!
  • 对于字符串数据,在将它们添加到数据库之前,您需要将它们括在引号中。
  • @AbhikChakraborty ...我已经更正了。

标签: php mysql sql arrays json


【解决方案1】:

首先,你的代码有错误:

foreach ($large_summary as $summary){ mysql_query("INSERT INTO articles(summary) VALUES($summary)"); echo "$summary
"; }

foreach ($large_summary as $summary){ mysql_query("INSERT INTO articles(summary) VALUES('$summary')"); echo "$summary
"; }

然后,请记住,您正在插入仅包含 (url, domain, favicon, title) 字段的行,然后是仅包含 (summary) 的一些行,然后是仅包含 (image) 的其他行。
我想你不想插入同一行吗?

如果你不想让它工作,你必须设置一个默认值:

ALTER TABLE `articles` CHANGE `summary` `summary` TEXT NULL DEFAULT NULL;

[编辑回复 Mutuma 评论]

您的数据库设置不正确。一组(url, domain, favicon, title) 的摘要很少。

所以你必须创建另一个表,例如 summaries(id, ref_article, summary)...
images 也一样!

请重新考虑基本结构。

【讨论】:

  • 是的,我确实想插入到同一行没有
  • 我已将所有字段默认设置为无。但是我收到一个错误 Error: Duplicate entry 'url' for key 'url' 并且输入数据库的数据是变量名而不是变量的内容
  • 不要将其设置为“none”,但NULL DEFAULT NULLDEFAULT 'something' 而不是none。阅读 MySQL 文档以了解 DEFAULT 值!
  • ...我的错,我已将其设置为 NULL,我得到的错误是因为我试图保存记录两次,因为 url 设置为唯一,但是我去使用了孩子表、图像、social_shares 和摘要,并将它们与父表文章相关联,但我在通过父表将数据插入子表时遇到问题,文章
猜你喜欢
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 2013-04-05
相关资源
最近更新 更多