为了账号安全,请及时绑定邮箱和手机立即绑定

SQL插入和删除逻辑建议

SQL插入和删除逻辑建议

PHP
噜噜哒 2023-10-15 16:38:32
在表单发布中,需要删除某些行或需要将新行插入到数据库(mysql)中。我拥有的:$toInsert = array() // array of ID's where new rows need to be created because these ID's dont exist in any row.$toDelete = array() // array of ID's where rows containing this ID need to be deleted.删除sql查询:$sql = DELETE FROM table WHERE id IN ' . implode(',',$toDelete);查询删除包含此 ID 的所有行。我怎样才能做同样的事情,但使用插入?某些默认值需要与 ID 本身一起插入。非常感谢您的建议或批评。
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

请记住,您必须对 ids 进行转义(或确保转换为整数)。正确的语法是:

$q_delete_ids = implode(', ', array_map('intval', $toDelete));
$sql = " DELETE FROM table WHERE id IN ($q_delete_ids) ";

应开发一个通用函数,在其中引用任何值并与 array_map 一起使用。

例如,带有一个虚构的数据库对象的代码,该对象具有 escape() 方法(类似于addslashes(),但对于数据库引擎来说更安全,并避免随机排序问题......)

public function quoteSurround($val) {
    return "'" . $this-db->escape($val) . "'";
}

现在,对于插入,应该开发一个通用方法,例如传递一个包含 db 所有列的数组(如果您错过了某些列,请确保 mysql 表 DDL 中有默认值)。

本质上,您应该开发一个函数来创建并执行一个 sql 字符串,例如

INSERT INTO table (col1, col2, col3) VALUES (1, 'test1', '2000-01-01'), (2, 'test2', '2000-02-02'), (3, 'test3', '2000-03-03'), (4, 'test4', '2000-04-04'), (5, 'test5', '2000-05-05');

我希望我能在接下来的几天里将要点发布到 github 上......


查看完整回答
反对 回复 2023-10-15
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信