Ruzzz
Новичок
создание запроса INSERT
Для создания запроса Insert использую следующий код:
У меня есть поля которые могут быть null. Поэтому если их не передали то и не хочу их добавлять(даже пустые) в таблицу. Создаю ассоц. массив, где лючи это имена полей. В GetParams формирую этот массив, заодно и проверяю переданные данные.
я решил как то упростить проверку каждой переданой строки. И хотел придумать как создавать строку запроса, учтывая что если переданная строка пустая, то я ее не включаю в запрос
Прокомментируйте позжлста!
Для создания запроса Insert использую следующий код:
PHP:
<?php
// Эта функция нужна лишь для array_map('PrepareFieldValueForQuery', $result);
// которая используется в функции ниже GetParams()
// чтобы подготовить строковые параметры для SQL запроса
function PrepareFieldValueForQuery($value)
{
return '\'' . mysql_real_escape_string($value) . '\'';
}
// Это функция с помощью которой я извлекаю строковые параметры,
// которые были переданы скрипты методом POST
// Здесь я проверяю был ли передан параметр с именем $var
// Заодно проверяю заданый мной лимит на длину строки и
// нужно ли эту строку "подготовить" для вывода в браузере с помощью htmlspecialchars
// дело в том что не все строки я экранирую
// Каждый параметр я добавляю в ассоц. массив
function CheckStringParam(&$arr, $var, $len_limit, $safe_for_html = true) {
if (isset($_POST[$var]) && !empty($_POST[$var])) {
$str = $_POST[$var];
if ($safe_for_html) $str = htmlspecialchars($str);
if (($len_limit > 0) && (mb_strlen($str) > $len_limit)) $str = mb_substr($str, 0, $len_limit);
$arr[$var] = $str;
}
}
// Функция формирует массив параметров, для построения запроса
function GetParams() {
CheckStringParam($result, 'name', 100);
CheckStringParam($result, 'keywords', 255);
CheckStringParam($result, 'description', 255);
CheckStringParam($result, 'title', 100);
CheckStringParam($result, 'caption', 200);
$result['date'] = date('Y-m-d H:i:s');
$result['date_gmt'] = gmdate('Y-m-d H:i:s');
CheckStringParam($result, 'content', 0, false);
$result = array_map('PrepareFieldValueForQuery', $result);
return $result;
}
// Нужна лишь для кода $result = array_map('PrepareFieldNameForQuery', $result);
function PrepareFieldNameForQuery($name) {
return '`' . $name . '`';
}
// Получаю строку - часть для запроса, в которой будут переданы имена полей через запятую
// Формирую из ключей заранее подготовленного массива
function GetFieldsNames($arr) {
$result = array_keys($arr);
$result = array_map('PrepareFieldNameForQuery', $result);
$result = implode(', ', $result);
return $result;
}
// И так начало скрипта по добавлению в таблицу информации на основе данных
// посланных методом POST из формы
// Формируем, ассоц. массив параметров
// Где, ключ массива - это имя поля таблицы -
// соотв. имя параметра переданого из формы методом POST
$params = GetParams();
// Создаем часть строки запроса, новые значения через запятую
$fields_values = implode(', ', $params);
// См. GetFieldsNames
$fields_names = GetFieldsNames($params);
// Получаем полную строку запроса
$query = 'INSERT INTO `pages` ('.$fields_names.') VALUES ('.$fields_values.')';
// Далее идет код который выполняет запрос
// И говорит что все ОК или наоборот выдает сообщение об ошибке
?>
я решил как то упростить проверку каждой переданой строки. И хотел придумать как создавать строку запроса, учтывая что если переданная строка пустая, то я ее не включаю в запрос
Прокомментируйте позжлста!
понял, ну да!