Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php RightMove数组-插入列标题和值_Php_Sql_Arrays - Fatal编程技术网

Php RightMove数组-插入列标题和值

Php RightMove数组-插入列标题和值,php,sql,arrays,Php,Sql,Arrays,我被一件本应该很容易的事情缠住了。我正在尝试使用来自的PHP类解析.BLM文件 该类工作正常,并输出如下数组:- Array ( [0] => Array ( [AGENT_REF] => _70 [ADDRESS_1] => 123 Main Street [POSTCODE1] => CF12 [POSTCODE2] => 4HY [FEATURE1] => Ideal Location [FEATURE2] => Only £250 per roo

我被一件本应该很容易的事情缠住了。我正在尝试使用来自的PHP类解析.BLM文件

该类工作正常,并输出如下数组:-

Array ( [0] => Array ( [AGENT_REF] => _70 [ADDRESS_1] => 123 Main Street [POSTCODE1] => CF12 [POSTCODE2] => 4HY [FEATURE1] => Ideal Location [FEATURE2] => Only £250 per room [FEATURE3] => Three Double Bedrooms ) [2] => Array ( [AGENT_REF] => _83 [ADDRESS_1] => 45 Harriet Street [POSTCODE1] => CF24 [POSTCODE2] => 4BU [FEATURE1] => Modern [FEATURE2] => Laminate Flooring ) )
一旦创建了数组,我想立即将数组插入到SQL表中。理想情况下,这将获取字段标题,例如[AGENT\u REF][ADDRESS\u 1],并创建列,并将数据作为每个数组的新行插入([0]=>array[2]=>array)等

我已经尝试过这样的东西和许多其他的变化,我似乎无法让它工作

function mysql_insert_array($table, $rmdata) {
foreach ($rmdata as $field=>$value) {
 $fields[] = '`' . $field . '`';
 $values[] = "'" . $value . "'";

}
$field_list = join(',', $fields);
$value_list = join(', ', $values);



$query = "INSERT INTO testarray (" . $field_list . ") VALUES (" . $value_list . ")";

在插入之前,必须使用字段列表创建表。 如果尚未创建表,则可以使用:

$sql = "CREATE TABLE if not exists TABLENAME ( 
    id tinyint(4) unsigned NOT NULL auto_increment, 
    AGENT_REF varchar(80) NOT NULL, 
    ADDRESS_1 varchar(255),
    POSTCODE1 varchar(6),
    POSTCODE2 varchar(6),
    FEATURE1 varchar(255),
    FEATURE2 varchar(255),
    FEATURE3 varchar(255),
    PRIMARY KEY (id) 
    )"; 

mysql_query($sql,$link); 
在您的函数之后。


$rmdata = ARRAY();

$rmdata['field1'] = 1;
$rmdata['field2'] = 'two';
$rmdata['field3'] = 3;
$rmdata['field4'] = NULL;
$rmdata['field5'] = 'five';

$fields = ARRAY();
$values = ARRAY();
foreach ($rmdata as $field=>$value) {
  if (!isset($value)) {
    //$value='';
    // or
    //if($field=='field4') { $value=4; }
    // or $values[] = "NULL";
  }

  if (isset($value)) {
    $fields[] = $field;
    $values[] = "'".$value."'";
  }

}

// if (count($fields) > 0)
$sql_fields = implode(',', $fields);
$sql_values = implode(',', $values);

您必须将单个值放在引号中-仅用逗号分隔是不够的。如果有些值为空,该怎么办?您在哪里填充$values数组?(并不是说这是一个思维障碍)你必须使用foreach循环。如果设置了$field,并且$value为空或未设置,则必须决定要执行的操作。设置一个(默认/空)值或从INSERT查询中排除该字段,而是让数据库输入该字段的默认值。好的,现在我只是在我的表中获取“空”值,除了“[0]=>Array”&[1]=>Array&[2]=>Array。问题是这只返回“INSERT INTO RMDATATABLE”(
0
1
2
)值('Array','Array','Array','Array')”可能是因为我尝试使用的数组是这样开始的。..Array([0]=>Array([AGENT\u REF]=>\u 70[ADDRESS\u 1]=>78然后你必须检查每个$rmdata数组,因此如果你使用数据,你必须将我上面的代码更改为foreach($rmdata[0]…如果你真的有不止一行($rmdata[0]=ARRAY(…),$rmdata[1]=ARRAY(…),你必须将显示的foreach放在另一个foreach中,使用索引,例如,$key like$rmdata[$key]=ARRAY(…),听起来很完美@djot,我会尝试一下!似乎工作得很好!!很棒的工作!一个问题是数组值中有时会出现“.”使用字符..例如=>这是一个美好的日子。这会因为“'”而导致SQL错误。有什么想法吗?
<?php

$rmdata = ARRAY();

$rmdata[0]['field1'] = 1;
$rmdata[0]['field2'] = 'two';
$rmdata[0]['field3'] = 3;
$rmdata[0]['field4'] = NULL;
$rmdata[0]['field5'] = 'five';
$rmdata[1] = $rmdata[2] = $rmdata[3] = $rmdata[0];

foreach ($rmdata AS $key => $dummy) {

  $fields = ARRAY();
  $values = ARRAY();

  foreach ($rmdata[$key] as $field=>$value) {
    if (!isset($value)) {
      //$value='';
      // or
      //if($field=='field4') { $value=4; }
      // or $values[] = "NULL";
    }

    if (isset($value)) {
      $fields[] = $field;
      $values[] = "'".$value."'";
    }
  }
  // if (count($fields) > 0)
  echo 'key: '.$key.'<br />';
  $sql_fields = implode(',', $fields);
  $sql_values = implode(',', $values);
  print_r($sql_fields); echo '<br />';
  print_r($sql_values); echo '<hr />';

}    

?>