Php SQL更新/插入,带$\u GET的循环

Php SQL更新/插入,带$\u GET的循环,php,mysql,sql,Php,Mysql,Sql,我的站点的大部分功能都使用ajax脚本。为了在特定的表中更新或插入一行,我使用$\u GET发送请求,然后使用 foreach ($_GET as $item => $value){ $$item =addslashes($value); } 然后我有这个SQL语句用于查询 if($_GET['action']=='update'){ $sql =$conn->query("UPDATE `newDrivers` SET `idCompany`='

我的站点的大部分功能都使用ajax脚本。为了在特定的表中更新或插入一行,我使用$\u GET发送请求,然后使用

foreach ($_GET as $item => $value){
        $$item =addslashes($value);
    }
然后我有这个SQL语句用于查询

if($_GET['action']=='update'){
     $sql =$conn->query("UPDATE `newDrivers` SET `idCompany`='$idCompany', ...
     WHERE `id`='$id'");
}
else{
     $sql =$conn->query("
    INSERT INTO `newDrivers`(`idCompany`, ...) 
    VALUES ('$idCompany', ...)");
} 

我看到效率低下,为每一列命名,并为每个表创建新文件。是否有任何方法可以在不单独命名每个列的情况下进行更新/插入,从而使脚本更具通用性?

这取决于您的数据库适配器。 在您的情况下,您可以这样编写构造

$columnsForUpdate = array();
//collect array with all pair `field` = 'value'
foreach ($_GET as $item => $value){
  $value = addslashes($value);
  $columnsForUpdate[] = "`{$item}` = '{$value}'";
 }
 if($_GET['action']=='update'){
 //concat it to string
 $columns = implode(', ', $columnsForUpdate);
 $sql =$conn->query("UPDATE `newDrivers` SET {$columns} WHERE id = {$id}")
 }
else{
     $columns = implode(', ', $columnsForUpdate);
    //insert have SET syntax too
     $sql =$conn->query("INSERT INTO `newDrivers` SET {$columns}");
} 

名称/值对表可能是一个简单的解决方案。PHP可以读取数据库的列名。这就是你想要做的吗?看起来不错,让我试试,告诉你它是否有效。看起来这将为我节省大量的代码!非常感谢。