将数组的值插入MYSQL

时间:2013-07-17 04:50:24

标签: php mysql arrays

我有一个文本文件,我已将其放入数组中的值, 这是php代码:

<?php
    $homepage = file_get_contents('hourlydump.txt');
    $x = explode('|', $homepage);
    $desc = array();
    $cat = array();
    $link = array();
    $m = 1;
    $n = 2;
    $p = 3;

    for ($i = 1; $i <= count($x) / 4; $i++) {
       $m = $m + 4;
       $desc[] = $x[$m];
       $n = $n + 4;
       $cat[] = $x[$n];
       $p = $p + 4;
       if ($x[$p])
          $link[] = $x[$p];
    }
    echo "<pre>";
    print_r($desc);
    print_r($cat);
    print_r($link);
?>

输出如下:

Array
(
    [0] => Kamal Heer - Facebook Official Video 720p Dual Audio [Hindi + Punjabi]76 mb by rANA.mkv
    [1] => 50 HD Game Wallpapers Pack- 1
)
Array
(
    [0] => Movies
    [1] => Other
)
Array
(
    [0] => http://kickass.to/kamal-heer-facebook-official-video-720p-dual-audio-hindi-punjabi-76-mb-by-rana-mkv-t7613070.html
    [1] => http://kickass.to/50-hd-game-wallpapers-pack-1-t7613071.html
)
//
//
//

任何人请帮助我我不知道如何插入这三个数组$ desc,$ cat和$ link的值 进入mysql表,列名为description,category,link

我知道简单的插入查询但不知道如何处理这些数组。

6 个答案:

答案 0 :(得分:4)

我将举例说明如何建立基本数据库连接并完成插入,这仅用于说明目的。您应该在类中重新组织此代码,以便每个insert语句都不会创建PDO对象,而是重用之前创建的对象。

 function insertItem($desc, $cat, $link) {
    $dbh = new PDO("mysql:host=host;dbname=db", $user, $pass);
    $sql = "INSERT INTO table (description, category, link) VALUES (:desc, :cat, :link)";

    $sth = $dbh->prepare($sql);
    $sth->bindValue(":desc", $desc);
    $sth->bindValue(":cat", $cat);        
    $sth->bindValue(":link", $link);
    $sth->execute();
  }

答案 1 :(得分:1)

您可以使用for语句。

 for($x =0, $num = count($desc); $x < $num; $x++){
     // build you query 
     $sql = "INSERT into your_table (description, category, link) values ".
            "(".$db->quote($desc[$x]).",".$db->quote($cat[$x]).",".
                $db->quote($link[$x].")";
     $db->query($sql);
 }

当然,您必须使用适合您所选数据库API的卫生/报价方法。

答案 2 :(得分:0)

试试这个。我假设只有这么多值才能插入

for($i = 0;$i<2;$++) {
mysqli_query("INSER INTO tablename values(description,category,link) VALUES('$desc[$i]'
,'$cat[$i]','$link[$i]')");
}

答案 3 :(得分:0)

以下是一个简单的示例,用于从您检索文件的网站中读取文件,并将其插入数据库以清理数据:

<?php
// fill with your data
$db_host = 'localhost';
$db_user = '';
$db_pass = '';
$db_name = '';
$db_table = 'myTable';

$file = "hourlydump.txt.gz";
if($filehandle = gzopen($file, "r"))
{
    $content = gzread($filehandle, filesize($file));
    gzclose($file);
}
else
    die('Could not read the file: ' . $file);

$con = mysqli_connect($db_host,$db_user,$db_pass,$db_name);
if($con->connect_error)
    die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());

$sql = "INSERT INTO $db_table (description, category, link) VALUES (?, ?, ?)";
if (!$insert = $con->prepare($sql))
    die('Query failed: (' . $con->errno . ') ' . $con->error);

foreach (explode("\n", $content) as $line)
{
    list($md5hash,$desc,$cat,$link,$torrent) = explode("|", $line);
    if (!$insert->bind_param('sss',$desc,$cat,$link))
        echo 'Binding parameters failed: (', $insert->errno, ') ', $insert->error;

    if (!$insert->execute())
        echo 'Insert Error ', $insert->error;
}

$insert->close();
$con->close();

注意:您可能想要检查文件是否已成功加载,如果爆炸中的字段存在或不存在以防止进一步的问题,但一般来说这应该可以正常工作。

此外,您可能希望更改$sql以反映您的MySQL表格以及顶部的$db_table

更新:要插入所有值,请更改此项:

$sql = "INSERT INTO $db_table (description, category, link) VALUES (?, ?, ?)";

要:

$sql = "INSERT INTO $db_table (md5, description, category, link, torrent) VALUES (?, ?, ?, ? ,?)";

而且:

if (!$insert->bind_param('sss',$desc,$cat,$link))

要:

if (!$insert->bind_param('sssss',$md5hash,$desc,$cat,$link,$torrent))

上面注意s每个项目需要s你有5个项目所以5 s是S表示字符串,D double,I integer,B blob {{ 3}}

另请注意我们将在$sql上使用bind_param的每个项目的?

答案 4 :(得分:0)

您可以在进行计算时构建查询:

$query = "INSERT INTO `table` (`description`, `category`, `link`) VALUES ";
for ($i = 1; $i <= count($x) / 4; $i++) {
   $m = $m + 4;
   $query .= "('".$x[$m];
   $n = $n + 4;
   $query .= "','".$x[$n];
   $p = $p + 4;
   if ($x[$p]) $query .= "','".$x[$p]."'),";
   else $query .= "',NULL),";
}
$query = substr($query, 0, -1);//get rid of last comma
mysqli_query($query);

如果需要,您还可以与查询一起构建阵列:

$query = "INSERT INTO `table` (`description`, `category`, `link`) VALUES ";
for ($i = 1; $i <= count($x) / 4; $i++) {
   $m = $m + 4;
   $desc[] = $x[$m];
   $query .= "('".$x[$m];
   $n = $n + 4;
   $cat[] = $x[$n];
   $query .= "','".$x[$n];
   $p = $p + 4;
   if ($x[$p]){
       $link[] = $x[$n];
       $query .= "','".$x[$p]."'),";
   } else {
       $link[] = $x[$n];
       else $query .= "',NULL),";
}
$query = substr($query, 0, -1);//get rid of last comma
mysqli_query($query);

答案 5 :(得分:-1)

将数组设为字符串

$description = json_encode($desc);
$category = json_encode($cat);
$link = json_encode($link);

然后将这些值插入数据库

在抓取时

使用json_decode从字符串

中再次获取数组