简体   繁体   English

如何将数组插入MYSQL数据库?

[英]How to insert array into MYSQL database?

I have an array that I am trying to insert into my MYSQL database. 我有一个要插入到我的MYSQL数据库中的数组。 I'm not sure if its my MYSQL database or if its my php code but when I open my php file it does not insert anything into my table. 我不确定它是我的MySQL数据库还是php代码,但是当我打开php文件时,它不会在表中插入任何内容。 Here is my code I have so far. 这是我到目前为止的代码。

    <?php
    $con = mysql_connect("localhost","***","***");
    if (!$con)
    {
    die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("ms122r_reports", $con); 

    // Filter out zeros
    $words = file('http://www.ndbc.noaa.gov/data/latest_obs/latest_obs.txt',              FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

    $words = array_map('rtrim',$words);
    $string = implode(" ",$words);
    $array = explode(" ",$string);

    $filtered = (array_filter($array));

    $row4 = array_slice($filtered, 704, 22);

    $var1 = array_slice($row4, 0, 1);
    $var2 = array_slice($row4, 1, 1);
    $var3 = array_slice($row4, 2, 1);
    $var4 = array_slice($row4, 3, 1);
    $var5 = array_slice($row4, 4, 1);
    $var6 = array_slice($row4, 5, 1);
    $var7 = array_slice($row4, 6, 1);
    $var8 = array_slice($row4, 7, 1);
    $var9 = array_slice($row4, 8, 1);
    $var10 = array_slice($row4, 9, 1);
    $var11 = array_slice($row4, 10, 1);
    $var12 = array_slice($row4, 11, 1);
    $var13 = array_slice($row4, 12, 1);
    $var14 = array_slice($row4, 13, 1);
    $var15 = array_slice($row4, 14, 1);
    $var16 = array_slice($row4, 15, 1);
    $var17 = array_slice($row4, 16, 1);
    $var18 = array_slice($row4, 17, 1);
    $var19 = array_slice($row4, 18, 1);
    $var20 = array_slice($row4, 19, 1);
    $var21 = array_slice($row4, 20, 1);
    $var22 = array_slice($row4, 21, 1);

    // Insert into database
    mysql_query("INSERT INTO table1(#STN, LAT, LON, YYYY, MM, DD, hh, mm2, WDIR, WSPD,     GST, WVHT, DPD, APD, MWD, PRES, PTDY, ATMP, WTMP, DEWP, VIS, TIDE)
    VALUES ($var1, $var2, $var3, $var4, $var5, $var6, $var7, $var8, $var9, $var10,   $var11, $var12, $var13, $var14, $var15, $var16, $var17, $var18, $var19, $var20, $var21,
    $var22)");

    mysql_close($con);
    ?>

Sorry I am new to PHP and MYSQL. 抱歉,我是PHP和MYSQL的新手。 My column names in my MYSQL database are the same as what appears in the ()'s of table1(), and they are set to "text" as the type. 我在MYSQL数据库中的列名与在table1()的()中出现的列名相同,并且它们的类型设置为“文本”。 Any help is greatly appreciated thanks. 非常感谢任何帮助。

Dont forget to quote your vars As in VALUES ('$var1', '$var2' ....) 不要忘了用VALUES ('$var1', '$var2' ....)引用您的var。

By the way, I suggest you clean your code a little bit. 顺便说一句,我建议您稍微清理一下代码。 Creating $var{1-22} is going to be a nightmare to mantain. 创建$var{1-22}将是一场噩梦。 You could use the implode function instead of creating 22 variables 您可以使用implode函数而不是创建22个变量

I dont know, perhaps in this way? 我不知道,也许是这样吗?

echo 'VALUES (\'' . implode('\',\'', $row) . '\')';

Also, im not sure if Mysql allows columns with # on its name. 另外,我不确定Mysql是否允许名称带有#列。 Take a look at that your #STDN column and check if that is allowed. 查看您的#STDN列,并检查是否允许这样做。

Take into account the following: 请注意以下几点:

  • Please Consider switching to PDO or mysqli . 请考虑切换到PDOmysqli If you were using PDO this problem would have a very easy solution. 如果您使用的是PDO,则此问题将非常简单。

  • If you want to stick to mysql_* functions, at least sanitize all the data you are going to insert in your database with mysql_real_escape_string . 如果要坚持使用mysql_ *函数,请至少使用mysql_real_escape_string清理要插入数据库中的所有数据。

Try to debug it with echoing your sql syntaxt in browser: 尝试通过在浏览器中回显sql语法来调试它:

echo "INSERT INTO table1(#STN, LAT, LON, YYYY, MM, DD, hh, mm2, WDIR, WSPD,     GST, WVHT, DPD, APD, MWD, PRES, PTDY, ATMP, WTMP, DEWP, VIS, TIDE)
VALUES ($var1, $var2, $var3, $var4, $var5, $var6, $var7, $var8, $var9, $var10,   $var11, $var12, $var13, $var14, $var15, $var16, $var17, $var18, $var19, $var20, $var21,
$var22)";

Copy the echo result and execute it on mysql. 复制echo结果并在mysql上执行。 See whats happen. 看看发生了什么。

Hope this help 希望这个帮助

I am going to answer the title, which may also help you solve your issue. 我将回答标题,这也可能帮助您解决问题。 You can slice your array into another array to get only the values you want to insert. 您可以将数组切成另一个数组,以仅获取要插入的值。

$dbh = new PDO('mysql:host=localhost;dbname=dbname', $user, $pass);
$sth = $dbh->prepare('INSERT INTO table1(STN, LAT, LON, YYYY, MM, DD, hh, mm2, WDIR, WSPD,     GST, WVHT, DPD, APD, MWD, PRES, PTDY, ATMP, WTMP, DEWP, VIS, TIDE)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)')
$sth->execute(array())

You need to wrap your varables in code like '$var1' and in end of do die(mysql_error) like: 您需要将变量包装在类似“ $ var1”的代码中,并在do die(mysql_error)的末尾进行包装,例如:

mysql_query("INSERT INTO table1(#STN, LAT, LON, YYYY, MM, DD, hh, mm2, WDIR, WSPD,     GST, WVHT, DPD, APD, MWD, PRES, PTDY, ATMP, WTMP, DEWP, VIS, TIDE)
    VALUES ('$var1', '$var2', '$var3', '$var4', '$var5', '$var6', '$var7', '$var8', '$var9', '$var10',   '$var11', '$var12', '$var13', '$var14', '$var15', '$var16', '$var17', '$var18', '$var19', '$var20', '$var21',
   '$var22')") or die(mysql_error());

What mysql_error does is check and report errors in your statement. mysql_error的作用是检查并报告语句中的错误。 If got any, post them here to let us resolve it. 如果有的话,请将其张贴在这里,以便我们解决。 And you sure you are connectign to the database?? 并且您确定您已连接数据库?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM