PHP + Mysql 查询一个真正的初学者

标签 php mysql

经过多年的错误开始,我终于开始一头扎进学习编写 PHP 代码。在之前大约 10 次失败的学习尝试之后,它变得令人兴奋并且最终进展顺利。

我用来学习的项目是为了工作。我正在尝试将 100 多个固定宽度的文本文件导入 MySql 数据库。

到目前为止一切顺利
我对 sql 越来越熟悉,并且正在学习一些 php 技巧,但我不确定如何将所有部分结合在一起。我想做的事情的基本结构如下所示:

  1. 命名我要导入的文本文件
  2. 执行 LOAD DATA INFILE 将数据导入到一个字段到一个临时数据库
  3. 使用substring()将固定宽度的文件分隔成真实的列
  4. 删除我不想要的行(文件标识符、小计等....)
  5. 将临时数据库中的文件添加到主数据库
  6. 删除临时数据库并重新开始

如您在附加代码中所见,thigns 工作正常。它获取新文件,将其导入临时表,删除不需要的行,然后将内容移至最终主数据库。完美的。

问题三
我的两个问题是:

  1. 我这样做“正确”了吗?当我想一个接一个地运行一堆查询时,我是否一直将 mysql_query 分配给随机变量?

  2. 我将如何让脚本自动化以遍历那里的每个文件并导入它们?而不是每次都必须更改文件名并运行脚本。

  3. 最后,我将使用什么 PHP 函数来“选择”我要导入的文件?您知道,就像将文件附加到电子邮件 -> 浏览文件、上传文件,然后在其上运行脚本?

很抱歉这是一个 super 初学者的问题,但我很难理解所有部分是如何组合在一起的。具体来说,我想知道如何将多个 sql 查询串在一起形成一个脚本?我在下面做的方式?其他方式?

感谢 x 100 的任何见解!

特里

<?php 
 // 1. Create db connection  
 $connection = mysql_connect("localhost","root","root") or die("DB connection failed:" . mysql_error());

 // 2. Select the database  
 $db_select = mysql_select_db("pd",$connection) or die("Couldn't select the database:" . mysql_error());
?> 



 <?php 
  // 3. Perform db query  
  // Drop table import if it already exists
  $q="DROP table IF EXISTS import";


  //4. Make new import table with just one field
  if ($newtable = mysql_query("CREATE TABLE import (main VARCHAR(700));", $connection)) {
   echo "Table import made successfully" . "<br>";
  } else{
   echo "Table import was not made" . "<br>";
   }

  //5. LOAD DATA INFILE 
  $load_data = mysql_query("LOAD DATA INFILE '/users/terrysutton/Desktop/importmeMay2010.txt' INTO table import;", $connection) or die("Load data failed" . mysql_error());


   //6.  Cleanup unwanted lines
  if ($cleanup = mysql_query("DELETE FROM import WHERE main LIKE '%GRAND%' OR main LIKE '%Subt%' OR main LIKE '%Subt%'  OR main LIKE '%USER%'  OR main LIKE '%DATE%'  OR main LIKE '%FOR:%' OR main LIKE '%LOCATION%' OR main LIKE '%---%' OR `main` = '' OR `main` = '';")){
   echo "Table import successfully cleaned up";
  } else{
   echo "Table import was not successfully cleaned up" . "<br>";
  }



  // 7. Next, make a table called "temp" to store the data before it gets imported to denominators
  $temptable = mysql_query("CREATE TABLE temp
  SELECT
  SUBSTR(main,1,10) AS 'Unit', 
  SUBSTR(main,12,18) AS 'Description', 
  SUBSTR(main,31,5) AS 'BD Days', 
  SUBSTR(main,39,4) AS 'ADM',
  SUBSTR(main,45,4) AS 'DIS', 
  SUBSTR(main,51,4) AS 'EXP', 
  SUBSTR(main,56,5) AS 'PD', 
  SUBSTR(main,100,5) AS 'YTDADM', 
  SUBSTR(main,106,5) AS 'YTDDIS', 
  SUBSTR(main,113,4) AS 'YTDEXP', 
  SUBSTR(main,118,5) AS 'YTDPD'
  FROM import;");


  // 8. Add a column for the date 
  $datecolumn = mysql_query("ALTER TABLE temp ADD Date VARCHAR(20) AFTER Unit;");
  $date = mysql_query("UPDATE temp SET Date='APR 2010';");

  // 8. Move data from the temp table to its final home in the main database
  // Append data in temp table to denominator table
  $append = mysql_query("INSERT INTO denominators SELECT * FROM temp;");

  // 9. Drop import and temp tables to start from scratch.  
  $droptables = mysql_query("DROP TABLE import, temp;");

  // 10. Next, rename the text file to be imported and do the whole thing over again.

 ?>


<?php 
// 5. Close connection
mysql_close($connection);
?>

最佳答案

如果您可以访问类似的命令,则可以直接从 mysql 命令行加载所有数据。此外,您可以通过编写 shell 脚本来自动执行该过程。仅仅因为您可以在 PHP 中做某事并不意味着您应该这样做。

例如,您可以只安装 PHPMyAdmin,即时创建表,然后使用 mysqldump 将数据库定义转储到文件中。像这样

mysqldump -u myusername -pmypassword mydatabase > mydatabase.backup.sql

稍后,您可以重新加载整个数据库

mysql -u myusername -pmypassword < mydatabase.backup.sql

很酷,您正在学习用 PHP 做事,但要专注于定期做您将用 PHP 做的事情,而不是用 PHP 做 RDBMS 的事情,这不是您大多数时候应该做的事情。构建表单并处理数据。了解如何构建对象,以及您可能想要这样做的原因。前往查看 Symphony 和 Doctrine。了解前端 Controller 模式。

此外,请查看 PDO。直接使用 mysql_query() 函数是非常“糟糕的形式”。

最后,PHP 非常适合模板化和包含不同的部分以形成一个有凝聚力的整体。练习制作左侧和顶部导航 html 文件。弄清楚如何在您的所有页面上包含该文件,以便您的相同导航随处可见。

然后弄清楚如何查看页面名称等变量并突出显示您所在的导航选项卡。这些是 PHP 非常适合的事情。

关于PHP + Mysql 查询一个真正的初学者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3197281/

相关文章:

javascript - 解释一下以下(2)个定时函数/脚本的区别

javascript - 如果 php 中存在匹配项,如何在静态下拉列表中设置 jQuery 变量值

javascript - 将 JSON 保存到 SQL

php - Facebook 应用程序选项卡 -> 使用 PHP 进行外部链接

MySQL限制索引

php - OpenCart与会计软件的集成

php - Magento 图片上传文件名不保存在数据库中

mysql - 使用已存在的主键将新行插入到 mysql 表中

php - 在另一个表的结果中选择每个具有 id 的第一条记录

php - 定时邮件提醒 if/else