Ошибка синтаксиса - Переменная в индексе массива в MYSQL запросе.

Armageddance

Новичок
Что-то окончательно запутался с расположением кавычек в сложном запросе, битый час не могу разобраться...

PHP:
for($i=0;$i<=$count_place;$i++)
	{
	$query = "INSERT INTO place (place, booking_id) VALUES ('$place['".$i."']','$next_booking_id')";
	mysql_query($query);
	}
выдает ошибку
PHP:
syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
itprog
Совет конечно хороший, но бесполезный.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
itprog
топик стартер пока мягко скажем - новичок, и ему твои prepared не впились никуда. Надо соразмерять советы с тем, что имеем, нет?
 

itprog

Cruftsman
эм, человек с 2009 года на форуме. должен уже был прочитать про prepared. Тем более, с ними работать намного удобнее.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Тут есть люди, которые и с 2007 и раньше на форуме, однако не продвинулись в изучении языка ни на дюйм)))
 

Armageddance

Новичок
Собственно, зарегистрировался и правда в позапрошлом году, а детально php начал изучать с января этого года. Как раз сейчас читаю про prepared-запросы))
 

Фанат

oncle terrible
Команда форума
c0dex
не вижу никакой связи между новичками и неиспользованием препаредов.
это такое сакральное знание, доступное лишь умудрённым гуру?

itprog
Ну. лично я бы не сказал, что с препаредами работать намного удобнее. писать кучу байндов лично мне - лень.
и спринтф сам по себе ничем не лучше конкатенации.

Вы ребята готовы писать о чём угодно, только не по теме.

Armageddance
Во-первых, желательно в цикле не запросы выполнять, а формировать запрос вида INSERT INTO table VALUES (1,2),(2,3),(4,5)...
Во-вторых, все данные, добавляемые в запрос напрямую, должны быть соотетствующим образом обработаны. Поскольку обе переменные у тебя строки, то их надо пропускать через mysql_real_escape_steing()
ЛИБО воспользоваться советом itprog
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
> писать кучу байндов лично мне - лень.
можно юзать нормальный active record или DAO, в котором это реализовано через массив параметров
 

Фанат

oncle terrible
Команда форума
Вообще-то я смухлевал.
"куча байндов" выливается в кучу mysql_real_escape_string(), так что хрен редьки не слаще.
так что, наверное, да - лучше новичков смолоду приучать к препаредам.
они ближе к концепции "выстрелил и забыл", чем искейпинг.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
пример из мануала
PHP:
try {
  $dbh = new PDO($dsn, $user, $password);
  $calories = 150;
  $colour = 'red';
  $sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
  $sth->execute(array($calories, $colour));
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
никаких байндов
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Фанат
Не вижу зачем надо ему использовать сейчас PDO, или это сокрально ясно только вам? Он пока путался в синтаксисе и делал такие ошибки, из чего следовало, что ему надо разобраться в основах. Надеюсь, что он быстро разберется что к чему и потом уже будет смотреть в сторону "препаредов".
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
c0dex для новичка использование pdo/mysqli с prepared проще и безопасней, чем старый стиль составления запросов с экранированиями, конкатенациями и путаницей в кавычках
pdo сразу учит считать запрос объектом и упрощает переход к фреймворкам и паттернам
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
grigori
для новичка использование pdo/mysqli с prepared проще и безопасней, чем старый стиль составления запросов с экранированиями
Да кто бы спорил)))

А теперь представим ситуацию, как такой человек будет модифицировать чей-то код, если не знает про экранирование и т.д? Напилит дополнительное соединение с мускулем через PDO?

Я сам двумя руками за PDO, сам давно и плотно его использую. Но тут хотелось бы, чтобы человек почитал и разобрался в проблеме.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
а что он будет делать, встретив динозавра?
не стоит боятся всех проблем в мире, надо просто жить и делать правильно
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
я бы не назвал mysql_query динозавром, пока что круг использования весьма широк.
 
Сверху