SQL插入和删除逻辑建议

问题描述

在表单发布中,需要删除某些行或将新行插入数据库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本身一起插入。

非常感谢您的建议或批评。

解决方法

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

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

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

例如带有假想的db对象的代码,该对象具有escape()方法(例如addlashes(),但对于db引擎更安全,避免了随机归类的问题...)

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 ...