2015-03-17 3 views
1

Я использую сценарии 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', ...)"); 
} 

я вижу неэффективность, назначение каждого столбца и создание нового файла для каждой таблицы. Есть ли способ, который я могу обновить/вставить, не называя каждый столбец индивидуально, чтобы сценарий был более универсальным?

+0

таблица пар имя/значение может быть простым решением. – dudeman

+0

PHP может читать имена столбцов базы данных. Это то, что вы пытаетесь сделать? –

ответ

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

Это выглядит красиво, позвольте мне попробовать и рассказать вам, если это сработало –

+0

Похоже, это сэкономит мне тонны кодирования! Спасибо!! –

+0

приветствую :) –