|
|
|
| Почему в одном случае запрос типа
$query = "INSERT INTO orders (customerID, sumorder) VALUES ($userID, $sum)";
|
работает корректно,
а в другом только
$query = "INSERT INTO order_items VALUES('".$idorder."', '".$iddoc."', '".$docprice."')";
|
дает результат ? | |
|
|
|
|
|
|
|
для: evgen
(14.05.2006 в 16:24)
| | А какой результат? Можно переформулировать вопрос? | |
|
|
|
|
|
|
|
для: cheops
(14.05.2006 в 19:01)
| | Результат - это запись в БД (точнее сказать - таблицу order_items) значений переменных $idorder, '$iddoc, $docprice.
Запрос к базе находится внутри цикла foreach, когда мы бегаем по массиву, в котором расположены значения, присваиваемые вышеназванным переменным.
Если нужно конкретнее, то
// переменная определяется до цикла (для примера)
$idorder=8
...
// добавляем в базу инфу по этому заказу
foreach ($idpricearr as $iddoc=>$docprice)
{
$query = "INSERT INTO order_items VALUES('".$idorder."', '".$iddoc."', '".$docprice."')";
$result = mysql_query($query);
}
|
| |
|
|
|
|
|
|
|
для: evgen
(14.05.2006 в 16:24)
| | Потому что в SQL-запросе числа Вы можете (и по большому счету должны) писать в естественном виде, т.е. безо всяких кавычек. А символьные данные обязаны оформлять в виде символьных строк, т.е. сам текст брать в кавычки, экранировать кавычки, обратные слэши и некоторые спецсимволы. MySQL в некоторых случаях допускает послабления относительно стандарта, такие как возможность писать числа в кавычках. Пользоваться ими не стоит хотя бы из соображений потенциальной переносимости кода. | |
|
|
|
|
|
|
|
для: Trianon
(14.05.2006 в 21:23)
| | А подробнее про экранирования и т.п. в мускуле где можно почитать? Я пару дней назад купил ваш самоучитель по MySQL 5, но еще не углублялся, только по поводу INSERTa пришлось почитать - когда возникла проблема с добавлением (того, который в моем вопросе был).
Есть в этой книге? Не могли бы подсказать, чтобы время сейчас не терять - катастрофичски не хватат ! | |
|
|
|
|
|
|
|
для: Evgen
(14.05.2006 в 21:31)
| | чтобы правильно оформить символьную строку в качестве параметра MySQL-запроса, можно применить функцию mysql_escape_string:
<?
$name = mysql_escape_string($name);
$query = "SELECT * FROM tbl WHERE name = '$name' ";
$res = mysql_query($query);
?>
|
Эта функция выполнит необходимые экранировки, т.е. добавит слэши в нужных местах. Обрамляющие кавычки дописываются, как показано выше, руками.
Это справедливо как минимум в тех (наиболее распространенных) случаях, когда с сервером MYSQL обмениваются в обычных однобайтовых кодировках (windows-1251, koi8-r, и т.п.) | |
|
|
|
|
|
|
|
для: Trianon
(14.05.2006 в 21:23)
| | >... А символьные данные обязаны оформлять в виде
>символьных строк, т.е. сам текст брать в кавычки,
>экранировать кавычки...
А почему текст, задаваемый явно, не требует никаких экранирований и т.п.
Это
INSERT INTO customers VALUE ("Adam Smit");
|
будет правильно? | |
|
|
|
|
|
|
|
для: Evgen
(14.05.2006 в 21:39)
| | Спасибо за разъяснение!
PS. Че-то интересное со связью происходит... Ответ приходит раньше чем вопрос!
Или не со связью ... | |
|
|
|
|
|
|
|
для: Evgen
(14.05.2006 в 21:39)
| | Текст, задаваемый явно, тоже требует.
Это - правильно. Такую строку эта функция оставит без изменений. Но если в строке встретится кавычка (например O"Relly) то Вы вынуждены будете написать:
INSERT INTO customers VALUE ("O\"Relly");
| иначе получите ошибку синтаксиса.
И функция mysql_escape_string проделает ту же работу. | |
|
|
|