【问题标题】:How to insert in a database an array got by preg_match_all如何在数据库中插入 preg_match_all 获得的数组
【发布时间】:2018-03-04 20:42:10
【问题描述】:

我刚刚使用 preg_match_all 获得了一个数组,我尝试使用以下代码将其插入到表中:

$casturl = "https://www.themoviedb.org/movie/353491-the-dark-tower/cast";
$cast = file_get_contents($casturl);
preg_match_all('#<img class="profile lazyload fade" data-sizes="auto" data-src="(.*?)" data-srcset="#' , $cast , $castimg );    
print_r($castimg[1]);

$escaped_values = array_map('mysql_real_escape_string', array_values($castimg));
$values  = implode(", ", $escaped_values);
$sql = "INSERT INTO test (content) VALUES ('$values')";

但是我的数据库什么也没得到,我想可能是因为它不是一个常规数组,我不知道,我对 php 不是很有经验。

【问题讨论】:

  • 你不应该使用正则表达式来解析 HTML 使用 DOMDocument 作为 html 解析器。

标签: php mysql sql arrays preg-match-all


【解决方案1】:

这里是一个如何在 mysql 中向表中添加数据的示例:

<?php
session_start();
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);


// mysql settings change here !!!
$mdatabase = 'sun';
$muser = 'root';
$mpass = 'toor';
$mhost = 'localhost';
$mport = 3306;


$casturl = "https://www.themoviedb.org/movie/353491-the-dark-tower/cast";
$cast = file_get_contents($casturl);
preg_match_all('#<img class="profile lazyload fade" data-sizes="auto" data-src="(.*?)" data-srcset="#' , $cast , $castimg );    
echo "<pre>";
print_r($castimg[1]);

try{
    // Connect to database
    $db = Conn();

    // Add all links
    foreach ($castimg[1] as $key => $val) {
        // save to db
        saveLink($val);
    }
}catch(Exception $e){
    print_r($e);
}

// Add link function
function saveLink($link){
    global $db;
    if (!empty($link)) {
        $link = htmlentities($link,ENT_QUOTES,'UTF-8');
        $r = $db->query("INSERT INTO test(content) VALUES('$link')");
        // last inserted id if you had auto increment primary key id (int or bigint)
        $id = $db->lastInsertId();
        return $id;
    }else{
        return 0;
    }
}

// connect to mysql with PDO function
function Conn(){
    global $mhost,$mport,$muser,$mpass,$mdatabase;
    $connection = new PDO('mysql:host='.$mhost.';port='.$mport.';dbname='.$mdatabase.';charset=utf8', $muser, $mpass);
    // don't cache query
    $connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    // show warning text
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    // throw error exception
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // don't colose connecion on script end
    $connection->setAttribute(PDO::ATTR_PERSISTENT, false);
    // set utf for connection utf8_general_ci or utf8_unicode_ci 
    $connection->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8' COLLATE 'utf8_general_ci'");
    return $connection;
}

// end script
die();
?>

查看 php 信息扩展:

<?php
    phpinfo();
?>

【讨论】:

  • 你需要在 php.ini 中扩展 PDO(我不知道它默认是取消注释的)尝试使用 phpinfo();并看到它在 php 中启用:pdo_mysql
猜你喜欢
  • 2012-05-19
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 2021-10-06
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多