Дистанционная работа в Платформе.NET 2.0 обеспечивает канал IPC для межпроцессного взаимодействия в той же машине.
Единственное, что я бы изменил, - это использовать sprintf для удобства чтения
$sql = sprintf(
'INSERT INTO table (%s) VALUES ("%s")',
implode(',',array_keys($_fields)),
implode('","',array_values($_fields))
);
mysql_query($sql);
и сделать убедитесь, что значения экранированы.
В этом нет ничего плохого. Я делаю то же самое.
Но убедитесь, что вы mysql_escape ()
и указываете значения, которые вы вставляете в запрос, иначе вы столкнетесь с уязвимостью SQL-инъекции.
В качестве альтернативы вы можете использовать параметризованный запросы, и в этом случае вы можете фактически передать массив сам по себе, вместо построения строки запроса.
Лучше всего использовать ORM (Doctrine 2.0), реализацию ActiveRecord (Doctrine 1.0, RedBean) или реализацию шаблона TableGateway (Zend_Db_Table, Propel). Эти инструменты сделают вашу жизнь намного проще, возьмут на себя большую часть тяжелой работы и помогут защитить вас от SQL-инъекций.
Кроме этого, в том, что вы делаете, по сути нет ничего плохого, вы просто может захотеть абстрагировать его в класс или функцию, чтобы вы могли повторить функциональность в разных местах.
Используя уловку sprintf , упомянутую Галеном в предыдущем ответе , я придумал следующий код:
$escapedfieldValues = array_map(create_function('$e', 'return mysql_real_escape_string(((get_magic_quotes_gpc()) ? stripslashes($e) : $e));'), array_values($_fields));
$sql = sprintf('INSERT INTO table (%s) VALUES ("%s")', implode(',',array_keys($_fields)), implode('"," ',$escapedfieldValues));
mysql_query($sql);
Он генерирует вставку с экранированием и кавычками. Он также работает независимо от того, включен ли magic_quotes_gpc
. Код мог бы быть лучше, если бы я использовал новые анонимные функции PHP v5.3.0 , но мне нужно, чтобы он работал на старых установках PHP.
Этот код немного длиннее оригинала (и медленнее), но более безопасен.
Я использую это, чтобы получить часть VALUES INSERT. Но это может быть абсурдный способ делать что-то. Комментарии / предложения приветствуются.
function arrayToSqlValues($array)
{
$sql = "";
foreach($array as $val)
{
//adding value
if($val === NULL)
$sql .= "NULL";
else
/*
useless piece of code see comments
if($val === FALSE)
$sql .= "FALSE";
else
*/
$sql .= "'" . addslashes($val) . "'";
$sql .= ", ";
};
return "VALUES(" . rtrim($sql, " ,") . ")";
}