Я пытаюсь сделать что-то подобное, поэтому мне не нужно набирать все мои записи. Кажется, я не могу заставить это работать.
edit: добавлены некоторые изменения.
foreach($_POST as $key => $value)
{
$key = "'".mysql_real_escape_string($key)."'";
$value = "'".mysql_real_escape_string($value)."'";
$qstring = "UPDATE load_test SET ".$key."=".$value." WHERE Id = '".$_POST['id']."'";
mysql_query($qstring);
}
foreach($_POST as $k=>$v){
@$select.=" `".mysql_real_escape_string($k)."` = '".mysql_real_escape_string($v)."',";
}
$select = rtrim($select,',');
$select = "UPDATE load_test SET".$select." WHERE id=".$_POST['id'];
mysql_query($select) or die(mysql_error());;
попробуйте это намного быстрее, чем предыдущий, который вы хотите, чтобы выполнить более 1 запрос и другое, что я думаю, что он достаточно безопасен, чтобы избежать ключа, поскольку попытка обновления столбца, который не существует, не приведет вас никуда, и попытка выполнить эскалацию впрыска защитит вас от этого, вы должны убедиться, что идентификатор числовое значение
То, что вы пытаетесь сделать здесь, невероятно, опасно небезопасно.
// List the fields that may be updated here
$expectedFields = array('fielda', 'fieldb');
// Updated values to be stored here
$updates = array();
// Generate the update strings
foreach ($_POST as $key => $value) {
if (in_array($key, $expectedFields)) {
$updates[] = "`$key` = '".mysql_real_escape_string($key)."'";
}
}
// Do all updates at once
$qstring = "UPDATE load_test SET " . join(', ', $updates) . " WHERE Id = '" . mysql_real_escape_string($_POST['id']) . "'";
mysql_query($qstring);
Это улучшает несколько вещей