【问题标题】:Reading from a text file using PHP, adding to MySQL DB Problem使用 PHP 从文本文件中读取,添加到 MySQL DB 问题
【发布时间】:2011-10-26 00:13:58
【问题描述】:

我有以下 PHP 代码,允许我从文本文件中逐行读取并写入 MySQL 数据库。文本文件由每行用空格分隔的 13 个值组成。我已经在 SQL 中单独创建了表(需要所有相关字段:时间、WIMU_ID、Ax、Ay 等),然后运行下面的 PHP 将值插入表中。我的问题是:有没有办法在下面的 PHP 代码中创建表,而不必先在 SQL 中创建表?任何帮助或建议表示赞赏。 休。

<?php

    $connection  = mysql_connect('localhost','root','bonzo123');
    mysql_query('create database gameDB');
    mysql_select_db('gameDB');

    $wx = array_map('trim',file("Thu-Apr-01-09_41_01-2010.txt_calibrated_120Hz.txt"));
    $newwx = array();
    foreach($wx as $i => $line)
    {
            if ($i > 1)
            {
                    $tmp = array_filter(explode(' ',$line));
                    $q = "insert into test1 (Time, WIMU_ID, Ax, Ay, Az, Gx, Gy, Gz, Mx, My, Mz, Ax70, Ay37) values ('" . implode("','",$tmp) . "')";
                    $rw = mysql_query($q) or die("Problem with the query: $q<br>" . mysql_error());
            }
    }

?>

【问题讨论】:

    标签: php mysql phpmyadmin xampp


    【解决方案1】:

    我想你真正想要的是这个:

    http://dev.mysql.com/doc/refman/5.1/en/load-data.html

    您可以通过 PHP 调用它,但这会好很多,除非您有特定原因无法使用它。

    【讨论】:

    • 看起来大部分数据是以获取文本文件并将其放入 MYSQL 的形式。使用 PHP 作为中间人来处理每一行将非常低效,除非您绝对必须这样做,否则我不会推荐它。通过数据库引擎批量加载数据然后通过代码运行调整要容易得多。
    • 我希望使用类似的方法读取其他结构不太好的数据。数据如下所示: Frame_0100 X_coordinates 23.90,23.90,23.94,23.98,24.02,24.02,24.06 Y_coordinates 5.55,6.15,5.55,5.55,5.51,5.55,5.51 Z_coordinates 0.00,0.00.00.00,0.00.00,00. Frame_0101 X_coordinates 23.90,23.90,23.94,23.98,24.02,24.02,24.06 Y_coordinates 5.55,6.15,5.55,5.55,5.51,5.55,5.51 Z_coordinates 0.00,0.00,0.00,0.00,0.00,0.00,0.0 SQL可以这样处理数据吗?
    • 我将为此查询创建另一个问题线程。感谢您的帮助。
    【解决方案2】:

    当然,你可以执行如下命令:

    CREATE TABLE IF NOT EXISTS `test1`  (
    ...
    );
    

    要获取表创建查询,请在 SQL 中创建后发出此命令:

    SHOW CREATE TABLE `test1`;
    

    编辑:

    请注意,您不必直接在 SQL 中创建表,但由于您已经拥有,发出上述命令将为您提供您需要在 PHP 中包含的内容,以便在以后的安装中创建表应该该表不存在。

    另请注意,正如@Jeremy 建议的那样,您不必“滚动自己的”代码即可将数据文件导入表。创建表格后,您可以使用LOAD DATA INFILE... 填充表格。

    编辑 2:

    以下是基于您的评论的示例:

    <?php
    // Connect to the database server
    $connection = mysql_connect('localhost', 'root', 'bonzo123');
    if (!$connection)
        die('Could not connect: ' . mysql_error());
    
    // Create database gameDB
    if (mysql_query('create database gameDB', $connection)) {
        echo "Database gameDB created successfully.\n";
    } else {
        echo 'Error creating database: ' . mysql_error() . "\n:";
    }
    
    // select which database to use
    mysql_select_db('gameDB', $connection);
    
    // create table test1 if it doesn't already exist
    mysql_query('CREATE TABLE IF NOT EXISTS test1 (
        v1 varchar(100),
        v2 varchar(100),
        v3 varchar(100),
        v4 varchar(100),
        v5 varchar(100),
        v6 varchar(100),
        v7 varchar(100),
        v8 varchar(100),
        v9 varchar(100),
        v10 varchar(100)', $connection);
    
    ?>
    

    【讨论】:

    • 感谢您的回复。如果我这样做,我还需要先在 SQL 中创建表吗?
    • 不,您只需要为您的登录创建权限。既然您使用的是“root”,那应该没问题。
    • 类似的?
    • 很难从 cmets 格式中分辨出来(我意识到您无法编辑您的问题),但这看起来是正确的。 mysql_query(...) 前面不应该有$,而在v10 之后还有另一个奇怪的$,但在其他方面都很好。我会按照我认为你想要的方式格式化它并添加到我的答案中。
    • 您好,我尝试了上述建议,但它不会使用“CREATE IF NOT EXIST”命令创建表。我无法找到有关该命令的任何信息,对吗?我收到以下错误。我再次感谢您的帮助。数据库 gameDB 创建成功。查询问题:插入 test1 (Time, WIMU_ID, Ax, Ay, Az, Gx, Gy, Gz, Mx, My, Mz, Ax70, Ay37) 值 ('1270111261.3267093','2','0.603745',' 0.028351','0.310371','2052.000000','2037.182182','2046.591091','-0.909519','0.334003','-0.190586','1.102227','-0.025425') 表'testdb.'不存在
    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 2012-05-17
    • 1970-01-01
    • 2015-12-11
    • 2011-01-03
    • 2019-02-01
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多