【问题标题】:When insert elements of php array in table mysql what kind of data should be ? Only string?当在表mysql中插入php数组的元素时应该是什么样的数据?只有字符串?
【发布时间】:2017-11-09 23:07:37
【问题描述】:

我必须将多维php数组的元素插入到表mysql中,但我不知道应该在那里使用什么样的方法。

首先创建表

CREATE TABLE earthquakes (
  milliseconds BIGINT,
  latitude FLOAT,
  longitude FLOAT,
  magnitude FLOAT,
  depth FLOAT,
  source VARCHAR(2),
  region SMALLINT,
  serial VARCHAT(16)
);

我是否应该为其他列添加字符长度?

现在是插入元素的代码:

$array = array(
 array(12345678901112145,-35.4905,167.7843,7.5,450.4,"E",134,"2017-01-10-134"),
 array(12345678901112145,35.4905,-167.7843,3.2,45.4,"U",13,"2016-01-10-14"),
 array(12345678901112145,-35.4905,-167.7843,10.0,4,"I",1,"2016-01-10-1")
);


$data = array();
foreach($array as $row) {
 $milliseconds = mysql_real_escape_string($row[0]);
 $latitude = mysql_real_escape_string($row[1]);
 $longitude = mysql_real_escape_string($row[2]);
 $magnitude = mysql_real_escape_string($row[3]);
 $depth= mysql_real_escape_string($row[4]);
 $source= mysql_real_escape_string($row[5]);
 $code= mysql_real_escape_string($row[6]);
 $serial= mysql_real_escape_string($row[7]); 


 $data[] = "($milliseconds,$latitude,$longitude,$magnitude,$depth,'$source',$code,'$serial')";
}

$values = implode(',', $data);


$sql = "INSERT INTO earthquakes (milliseconds,latitude,longitude,magnitude,depth,source,region,serial) VALUES $values";

我怀疑代码是否正确,但特别是如果我必须为每个元素(添加到表中的每个值)添加 " " 双引号或单引号。

我希望你能帮助我并理解我的英语:(

更新

如果我回显$sql,这是结果

INSERT INTO earthquakes (milliseconds,latitude,longitude,magnitude,depth,source,region,serial) VALUES (12345678901112145,-35.4905,167.7843,7.5,450.4,'E',134,'2017-01-10-134'),(12345678901112145,35.4905,-167.7843,3.2,45.4,'U',13,'2016-01-10-14'),(12345678901112145,-35.4905,-167.7843,10,4,'I',1,'2016-01-10-1')

【问题讨论】:

  • 你检查$values的值了吗?我想你在VALUES 之后查询会报错
  • 结果是什么?..只需 echo $sql 并在此处显示
  • @Jana 结果在哪里?
  • @Swellar 你为什么这么认为?
  • 您是否尝试过回显$values 的结果?

标签: php mysql arrays database type-conversion


【解决方案1】:

你应该试试这个:-

 $array = array(
 array(12345678901112145,-35.4905,"222",7.5,450.4,"E",134,"2017-01-10-134"),
 array(12345678901112145,35.4905,-167.7843,3.2,45.4,"U",13,"2016-01-10-14"),
 array(12345678901112145,-35.4905,-167.7843,10.0,4,"I",1,"2016-01-10-1")
);

//----------------------------
 connection to db is necessary to use mysql_real_escape_string function
//----------------------------

$sql = "INSERT INTO earthquakes (milliseconds,latitude,longitude,magnitude,depth,source,region,serial) VALUES ";

foreach($array as $row) {
     $milliseconds = mysql_real_escape_string($row[0]);
     $latitude = mysql_real_escape_string($row[1]);
     $longitude = mysql_real_escape_string($row[2]);
     $magnitude = mysql_real_escape_string($row[3]);
     $depth= mysql_real_escape_string($row[4]);
     $source= mysql_real_escape_string($row[5]);
     $code= mysql_real_escape_string($row[6]);
     $serial= mysql_real_escape_string($row[7]); 
     $sql .="($milliseconds,$latitude,$longitude,$magnitude,$depth,'$source',$code,'$serial'),";
}
$sql = rtrim($sql, ',');
excute the sql here.

如果列类型为 varchar,则必须在值中添加 '' 单冒号。

【讨论】:

  • 我不明白:我必须在哪里添加引号?
  • 在该行中查看 --- $sql .="($milliseconds,$latitude,$longitude,$magnitude,$depth,'$source',$code,'$serial'),"; 源和序列有单引号,因为它们的列类型是 db 中的 varchar
  • 是的,结果是一样的。我只是在提示您在哪里放置单引号,并且还稍微重构了代码,删除了额外的数组和内爆函数。谢谢:)
猜你喜欢
  • 2014-08-12
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多