带有$ _GET循环的SQL Update / Insert

时间:2015-03-17 19:45:38

标签: php mysql sql

我使用ajax脚本来实现我网站的大多数功能。为了在特定表中更新或插入行,我使用$ _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', ...)");
} 

我看到效率低下,为每个列命名并为每个表创建新文件。有没有什么方法可以更新/插入而不单独命名每一列,所以脚本更像是一个通用的?

1 个答案:

答案 0 :(得分:2)

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

$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}");
}