1 回答

TA贡献1816条经验 获得超4个赞
一种方法是qstonesid从数组中检索列表并在调用过程之前检查数据库。
要从您那里获取qstonesid值列表,$StoneArr可以使用array_column.
$ids = array_column($StoneArr, 'qstonesid');
接下来检索$ids数据库中存在的列表并构建另一个列表。
我不确定您使用的是什么数据库扩展,但我认为是这样的。请参阅下面的工作示例链接,以获取PDO带有准备好的语句的演示。
$rs = query('SELECT qstonesid FROM tbl_stickering WHERE qstonesid IN(' . implode(',', $ids) . ')');
$exists = array_column($rs, 'qstonesid');
ifqstonesid是一个字符串值数组,您可以使用引号将每个值括起来。
'"' . implode('","', $ids) . ') . '"';
最后,在您的foreach循环in_array中,用于检查结果$exists数组是否存在,如果是,则$Stone['qstonesid']用于continue继续进行下一次迭代。
工作示例:https ://3v4l.org/eJXu5
foreach ($StoneArr as $Stone) {
if (in_array($Stone['qstonesid'], $exists)) {
echo $Stone['qstonesid'] . ' Already Exists.';
continue;
}
//...
}
完整示例:
$stones = $_POST['stones'];
$StoneArr = json_decode($stones, true);
//retrieve listing of submitted qstonesid values
$StoneArrIds = array_column($StoneArr, 'qstonesid');
//retrieve listing of existing qstonesid
/**
* modify to suit your database extension
* !! Subject to SQL Injection !!
* !! HIGHLY RECOMMEND USING PREPARED STATEMENTS !!
*/
$rs = query('SELECT qstonesid
FROM tbl_stickering
WHERE client_name = "' . $_REQUEST['clientname'] . '"
AND qstonesid IN("' . implode('","', $StoneArrIds) . '")');
$exists = array_column($rs, 'qstonesid');
$updstmt = '';
foreach ($StoneArr as $Stone) {
//qstonesid already exists, display a message and skip insertion
if (in_array($Stone['qstonesid'], $exists)) {
echo $Stone['qstonesid'] . ' already exist';
continue;
}
$currentdate= !empty($Stone['currentdate'] ) ? $Stone['currentdate'] : '0000-00-00 00:00:00';
$qstonesid = $Stone['qstonesid'];
$clientname = $_REQUEST['clientname'];
$empid = $_REQUEST['empid'];
$updstmt .= 'CALL sp_stickering('.'"'.$currentdate.'"'.',
'.'"'.$clientname.'"'.',
'.'"'.$qstonesid.'"'.',
'.'"'.$empid.'"'.'
);';
}
if ($updstmt) {
$res = query($updstmt);
if (strlen($res) > 0) {
echo $res;
} else {
echo 'Records added successfully...';
}
}
- 1 回答
- 0 关注
- 94 浏览
添加回答
举报