我有一个如下所示的数组$contact
:
Array
(
[0] => Array
(
[type] => Textbox
[label] => Company
[name] => company
[properties] => a:2:{s:11:"class_label";s:8:"col-md-4";s:5:"class";s:8:"col-md-8";}
[language] => EN
[weight] => 1
[nid] => 5
)
[1] => Array
(
[type] => Textbox
[label] => First name
[name] => first_name
[properties] => a:3:{s:8:"required";b:1;s:11:"class_label";s:8:"col-md-4";s:5:"class";s:8:"col-md-8";}
[language] => EN
[weight] => 2
[nid] => 5
)
[2] => Array
(
[type] => Textbox
[label] => Last Name
[name] => last_name
[properties] => a:3:{s:8:"required";b:1;s:11:"class_label";s:8:"col-md-4";s:5:"class";s:8:"col-md-8";}
[language] => EN
[weight] => 3
[nid] => 5
)
我想将其更改为:
INSERT INTO `form` (`nid`, `language`, `label`, `name`, `type`, `properties`, `options`, `weight`) VALUES
( 5, 'EN', 'Société', 'societe', 'Textbox', 'a:2:{s:11:"class_label";s:8:"col-md-4";s:5:"class";s:8:"col-md-8";}', NULL, 1),
( 5, 'EN', 'First name', 'first_name', 'Textbox', 'a:3:{s:8:"required";b:1;s:11:"class_label";s:8:"col-md-4";s:5:"class";s:8:"col-md-8";}', NULL, 2),
( 5, 'EN', 'Last Name', 'last_name', 'Textbox', 'a:3:{s:8:"required";b:1;s:11:"class_label";s:8:"col-md-4";s:5:"class";s:8:"col-md-8";}', NULL, 3);
所以我尝试了这个:
function insert_contact($array){
foreach($array as $key => $value){
if ($key == 'fields'){
$columns = array_keys($value);
$values = array_values($value);
}
}
$sql = "INSERT INTO `".'form' . "` (`".implode("`, `", $columns)."`)";
$sql .= " VALUES ('".implode("', '", $values)."') ;";
return $sql;
}
它只适用于数组的第一个元素,但是当我这样做时:
foreach ($var as $key => $value) {
var_dump(insert_contact( $var[$key]));
}
它显示我的错误:Notice: Undefined variable: columns
有没有办法避免此错误并生成一个干净的SQL查询?感谢
答案 0 :(得分:2)
您的阵列中没有fields
。代码用于第一个元素的原因是:
if ($key == 'fields'){
如果$ key为0
(由于类型强制),将为真。
尝试:
function insert_contact($array){
$values = array();
foreach($array as $key => $value){
$columns = array_keys($value);
$values[] = "('" . implode("', '", array_values($value))."')";
}
$sql = "INSERT INTO `".'form' . "` (`".implode("`, `", $columns)."`)";
$sql .= " VALUES ".implode(',', $values) .";";
return $sql;
}
请注意,如果$array
或其内容可能来自用户输入,则您不希望在没有首先转义它们的情况下使用查询中的值。
答案 1 :(得分:0)
Jim写了一个很好的答案,但他从未解释过实际的错误:
在函数的第8行,您调用变量$columns
。但是,由于$key == 'fields'
的计算结果为false,因此永远不会设置。这就是为什么错误说明有一个未定义的变量名为' columns'在剧本中。
您只能调用之前已定义的变量。