0

我有一个数组,我试图插入到我的 MYSQL 数据库中。我不确定它是我的 MYSQL 数据库还是我的 php 代码,但是当我打开我的 php 文件时,它不会在我的表中插入任何内容。这是我到目前为止的代码。

    <?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);
    ?>

对不起,我是 PHP 和 MYSQL 的新手。我的 MYSQL 数据库中的列名与 table1() 的 () 中出现的相同,并且它们被设置为“文本”作为类型。非常感谢任何帮助,谢谢。

4

4 回答 4

1

不要忘记引用你的变量如VALUES ('$var1', '$var2' ....)

顺便说一句,我建议你稍微清理一下你的代码。创造$var{1-22}将是一场噩梦。您可以使用 implode 函数而不是创建 22 个变量

我不知道,也许是这样?

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

另外,我不确定 Mysql 是否允许列#在其名称上。查看您的#STDN专栏并检查是否允许这样做。

考虑以下几点:

  • 请考虑切换到PDOmysqli。如果您使用PDO,这个问题将有一个非常简单的解决方案。

  • 如果你想坚持使用 mysql_* 函数,至少使用mysql_real_escape_string清理你要插入数据库的所有数据。

于 2012-05-08T02:35:54.857 回答
0

您需要将变量包装在像 '$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());

mysql_error 所做的是检查并报告语句中的错误。如果有任何问题,请在此处发布以让我们解决。你确定你连接到数据库?

于 2012-05-08T06:18:38.143 回答
0

尝试通过在浏览器中回显您的 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)";

复制回显结果并在mysql上执行。看看发生了什么。

希望这有帮助

于 2012-05-08T02:19:26.733 回答
0

我来回答一下标题,这也可以帮助你解决你的问题。您可以将数组切片到另一个数组中以仅获取要插入的值。

$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())
于 2012-05-08T02:25:04.273 回答