如果空 pdo php,则数组在 php 中执行
Array execute in php if empty pdo php
foreach($parentinfojson as $value) {
if (!empty($parentinfojson )) {
$stmt2 = $dbh -> prepare("INSERT INTO parentinfo (last_name,first_name,status) VALUES (:lastname,:firstname,:status)");
$stmt2_ = $stmt2 -> execute(array(':firstname' => $value['firstname'], ':lastname' => $value['lastname'], ':status' => $status));
} else {
$stmt2_ = $stmt2 -> execute();
}
}
if ($stmt2_ && $stmt3_ && $stmt1_ && $stmt_ && $stmt5_ && $stmt4_) {
echo json_encode(array(
'error' => false,
'message' => "Added"
));
}
这是我在table中执行的Inserting
新数据。当我测试空数据的添加时(parentinfojson
为空)我得到错误 Notice: Undefined variable: stmt2_
。我所做的是我添加了一个 else
语句并且我初始化了变量仍然我得到错误。我也试图在 else 语句中回应一些东西,但我得到了错误。现在我 运行 不知道如何在 json
为空时初始化变量,这样我就不会得到错误 undefined variable
有可能你接收到的json变量不为空,所以你也应该添加对valid json的检查,这是检查valid [=]的函数13=]
function isJson($string) {
json_decode($string);
return (json_last_error() == JSON_ERROR_NONE);
}
你刚刚在循环中定义了$stmt2
,如果$parentinfojson
为空,它肯定会变得未定义。为什么不define/initialize呢。
// initialize up top
$stmt_ = $stmt1_ = $stmt2_ = $stmt3_ = $stmt4_ = $stmt5_ = false;
$stmt2 = $dbh->prepare("INSERT INTO parentinfo (last_name,first_name,status) VALUES (:lastname,:firstname,:status)");
foreach($parentinfojson as $value) {
$stmt2_ = $stmt2->execute(array(
':firstname' => $value['firstname'],
':lastname' => $value['lastname'],
':status' => $status
));
}
if ($stmt2_ && $stmt3_ && $stmt1_ && $stmt_ && $stmt5_ && $stmt4_) {
echo json_encode(array(
'error' => false,
'message' => "Added"
));
}
旁注:另一种方法是动态构建查询,包括占位符和值。这样一来,您不必循环每批插入,而是创建 SQL 批量插入,然后将所有值绑定到一个插入调用中:
$stmt_ = $stmt1_ = $stmt2_ = $stmt3_ = $stmt4_ = $stmt5_ = false;
if(!empty($parentinfojson)) {
$base_query = 'INSERT INTO parentinfo (last_name, first_name, status) VALUES ';
$placeholders = implode(',', array_map(function($batch){
return '(' . implode(',', array_fill(0, count($batch), '?')) . ')';
}, $parentinfojson));
$base_query .= $placeholders;
$parentinfojson = call_user_func_array('array_merge', array_map('array_values', $parentinfojson));
$stmt2 = $dbh->prepare($base_query);
$stmt2_-> $stmt2->execute($parentinfojson);
}
foreach($parentinfojson as $value) {
if (!empty($parentinfojson )) {
$stmt2 = $dbh -> prepare("INSERT INTO parentinfo (last_name,first_name,status) VALUES (:lastname,:firstname,:status)");
$stmt2_ = $stmt2 -> execute(array(':firstname' => $value['firstname'], ':lastname' => $value['lastname'], ':status' => $status));
} else {
$stmt2_ = $stmt2 -> execute();
}
}
if ($stmt2_ && $stmt3_ && $stmt1_ && $stmt_ && $stmt5_ && $stmt4_) {
echo json_encode(array(
'error' => false,
'message' => "Added"
));
}
这是我在table中执行的Inserting
新数据。当我测试空数据的添加时(parentinfojson
为空)我得到错误 Notice: Undefined variable: stmt2_
。我所做的是我添加了一个 else
语句并且我初始化了变量仍然我得到错误。我也试图在 else 语句中回应一些东西,但我得到了错误。现在我 运行 不知道如何在 json
为空时初始化变量,这样我就不会得到错误 undefined variable
有可能你接收到的json变量不为空,所以你也应该添加对valid json的检查,这是检查valid [=]的函数13=]
function isJson($string) {
json_decode($string);
return (json_last_error() == JSON_ERROR_NONE);
}
你刚刚在循环中定义了$stmt2
,如果$parentinfojson
为空,它肯定会变得未定义。为什么不define/initialize呢。
// initialize up top
$stmt_ = $stmt1_ = $stmt2_ = $stmt3_ = $stmt4_ = $stmt5_ = false;
$stmt2 = $dbh->prepare("INSERT INTO parentinfo (last_name,first_name,status) VALUES (:lastname,:firstname,:status)");
foreach($parentinfojson as $value) {
$stmt2_ = $stmt2->execute(array(
':firstname' => $value['firstname'],
':lastname' => $value['lastname'],
':status' => $status
));
}
if ($stmt2_ && $stmt3_ && $stmt1_ && $stmt_ && $stmt5_ && $stmt4_) {
echo json_encode(array(
'error' => false,
'message' => "Added"
));
}
旁注:另一种方法是动态构建查询,包括占位符和值。这样一来,您不必循环每批插入,而是创建 SQL 批量插入,然后将所有值绑定到一个插入调用中:
$stmt_ = $stmt1_ = $stmt2_ = $stmt3_ = $stmt4_ = $stmt5_ = false;
if(!empty($parentinfojson)) {
$base_query = 'INSERT INTO parentinfo (last_name, first_name, status) VALUES ';
$placeholders = implode(',', array_map(function($batch){
return '(' . implode(',', array_fill(0, count($batch), '?')) . ')';
}, $parentinfojson));
$base_query .= $placeholders;
$parentinfojson = call_user_func_array('array_merge', array_map('array_values', $parentinfojson));
$stmt2 = $dbh->prepare($base_query);
$stmt2_-> $stmt2->execute($parentinfojson);
}