我有一个数组,我试图插入我的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()的()中的列名相同,并且它们被设置为“text”作为类型。非常感谢任何帮助。
答案 0 :(得分:1)
别忘了引用你的vars
与VALUES ('$var1', '$var2' ....)
顺便说一下,我建议你稍微清理你的代码。
创建$var{1-22}
对于mantain来说将是一场噩梦。
您可以使用implode函数而不是创建22个变量
我不知道,也许就是这样?
echo 'VALUES (\'' . implode('\',\'', $row) . '\')';
另外,我不确定Mysql是否允许名称中包含#
的列。看看您的#STDN
列,并检查是否允许这样做。
考虑以下因素:
如果您想坚持使用mysql_ *函数,请至少使用mysql_real_escape_string清理要插入数据库的所有数据。
答案 1 :(得分: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)";
复制echo结果并在mysql上执行它。看看发生了什么。
希望这个帮助
答案 2 :(得分: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())
答案 3 :(得分: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的作用是检查并报告语句中的错误。如果有任何,请将它们发布在这里让我们解决它。你确定你是数据库连接?