[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос по составлению строки запроса
codrilla
Здравствуйте, ситуация такая:
есть переменная
$attr_array = array ('title'=>'Full title', 'text'=>'Some text....')

есть таблица
id|title|text
Никак не могу сообразить, как написать запрос insert
$mysqli->query("INSERT INTO $table_name ...")

То же самое и с update. Сложность состоит в том, что запрос должен формироваться в зависимости от содержимого ассоциативного массива $attr_array. Помогите разобраться с этим. Заранее спасибо.
Hello
$mysqli->query("INSERT INTO $table_name (`title`, `text`) VALUES ({$attr_array['title']}, {$attr_array['text']})");


_____________
VPS от 5$, первые 2 месяца - бесплатно.
codrilla
Плохой вариант
Нужно что-то вроде

foreach ($attr_array as $k => $v)
{
$table_names = "$k,";//убрать последнюю запятую
$values = "'$v',";//убрать последнюю запятую
}

$result = $this->mysqli->query("INSERT INTO $table_name ($table_names) VALUES ($values)");
Hello
codrilla
Плохой пример входного массива

_____________
VPS от 5$, первые 2 месяца - бесплатно.
bestxp
$columns = array_keys($attr_array);
$values = array_values($attr_array);

$columns = array_map(function($val){return '`'.$key.'`';}, $columns);
$values = array_map(function($val){return mysqli_real_escape_string($val);}, $values );


$result = $this->mysqli->query("INSERT INTO $table_name (".join(',',$columns).") VALUES (".join(',',$values).")");


//upd

пример массива отличный
Поле = значение что надо

1 поля заключаем в обратные кавычки
2 экранируем записи
3 требуется Php 5.3 , в противном случае array_map заменить на foreach
codrilla
foreach ($attr_array as $k => $v)
{
$col_names = "$k,";
$col_names = substr($col_names, 0, -1);//убрать последнюю запятую
$values = "'$v',";
$values = substr($values, 0, -1);//убрать последнюю запятую
}

$result = $this->mysqli->query("INSERT INTO $table_name ($col_names) VALUES ($values)");


//upd
Сейчас разберусь и с вашим примером, bestxp, и определю, что лучше. Спасибо за ответ.
codrilla
bestxp, можно ли используя ваши функции составить запрос для INSERT. Мне пришло в голову следующее:

foreach ($attr_array as $k => $v)
{
$set = "$k='$v',";
$set = substr($set, 0, -1); //убрать последнюю запятую
}
$result = $this->mysqli->query("UPDATE $table_name SET $set WHERE id=$row-id");
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.