Files
EasySoft-ZenTaoPMS/zdata/create.php
2021-02-08 15:20:54 +08:00

76 lines
2.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
$dbms = 'mysql'; // 数据库类型。
$host = 'localhost'; // 数据库主机名。
$port = '3306'; // 数据库主机端口。
$dbName = 'zdata'; // 使用的数据库。
$user = 'root'; // 数据库连接用户名。
$password = 'root'; // 对应的密码。
$dsn = "$dbms:host=$host:$port;dbname=$dbName";
$dirPath = 'demo/story'; // 自定义数据的zdata文件路径。
/* 定义每个yaml文件生成SQL数量自定义yaml文件名需和数据库表名对应。以下定义中键代表数据表名值代表生成数量。*/
$zdataCount = array();
$zdataCount['zt_product'] = 100;
$zdataCount['zt_productplan'] = 500;
$zdataCount['zt_project'] = 100;
$zdataCount['zt_module'] = 1000;
$zdataCount['zt_story'] = 10000;
$zdataCount['zt_storyspec'] = 10000;
$zdataCount['zt_action'] = 10000;
$zdataExec = "zd -c $dirPath/%s -d %s -n %s -o $dirPath/sql/%s.sql -table %s";
set_time_limit(0);
try
{
$dbh = new PDO($dsn, $user, $password); // 初始化一个PDO对象。
echo $dbms . '连接成功' . PHP_EOL;
$yamlFilePath = scandir($dirPath);
foreach($yamlFilePath as $file)
{
if(strpos($file, '.yaml'))
{
$fileName = basename($file, '.yaml');
$count = isset($zdataCount[$fileName]) ? $zdataCount[$fileName] : 10;
$execYaml = sprintf($zdataExec, $file, $file, $count, $fileName, $fileName);
exec($execYaml); // 执行zdata命令调用yaml文件生成SQL数据。
echo '执行命令:' . $execYaml . PHP_EOL;
}
}
/* 读取生成的SQL文件,导入数据到数据库。*/
$sqlDir = $dirPath . '/sql/';
$sqlFilePath = scandir($sqlDir);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 设置报错处理方式。
$dbh->exec("SET GLOBAL sql_mode = '';");
$dbh->exec("set names 'utf8'");
$dbh->beginTransaction();
foreach($sqlFilePath as $file)
{
if(strpos($file, '.sql'))
{
$tableName = basename($file, '.sql');
$truncate = 'truncate table ' . $tableName;
$dbh->exec($truncate);
$sql = file_get_contents($sqlDir . $file);
$count = $dbh->exec($sql);
echo $tableName . '表影响行数:' . $count . PHP_EOL;
}
}
$dbh->commit();
$dbh = null; // 关闭连接。
}
catch (PDOException $e)
{
die('Error!: ' . $e->getMessage() . PHP_EOL);
}