Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Кавычки, точки и т.п. в запросе
 
 автор: evgen   (14.05.2006 в 16:24)   письмо автору
 
 

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

$query = "INSERT INTO orders (customerID, sumorder) VALUES ($userID, $sum)";

работает корректно,
а в другом только

$query = "INSERT INTO order_items VALUES('".$idorder."', '".$iddoc."', '".$docprice."')";

дает результат ?

   
 
 автор: cheops   (14.05.2006 в 19:01)   письмо автору
 
   для: evgen   (14.05.2006 в 16:24)
 

А какой результат? Можно переформулировать вопрос?

   
 
 автор: Evgen   (14.05.2006 в 21:25)   письмо автору
 
   для: 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);
}

   
 
 автор: Trianon   (14.05.2006 в 21:23)   письмо автору
 
   для: evgen   (14.05.2006 в 16:24)
 

Потому что в SQL-запросе числа Вы можете (и по большому счету должны) писать в естественном виде, т.е. безо всяких кавычек. А символьные данные обязаны оформлять в виде символьных строк, т.е. сам текст брать в кавычки, экранировать кавычки, обратные слэши и некоторые спецсимволы. MySQL в некоторых случаях допускает послабления относительно стандарта, такие как возможность писать числа в кавычках. Пользоваться ими не стоит хотя бы из соображений потенциальной переносимости кода.

   
 
 автор: Evgen   (14.05.2006 в 21:31)   письмо автору
 
   для: Trianon   (14.05.2006 в 21:23)
 

А подробнее про экранирования и т.п. в мускуле где можно почитать? Я пару дней назад купил ваш самоучитель по MySQL 5, но еще не углублялся, только по поводу INSERTa пришлось почитать - когда возникла проблема с добавлением (того, который в моем вопросе был).

Есть в этой книге? Не могли бы подсказать, чтобы время сейчас не терять - катастрофичски не хватат !

   
 
 автор: Trianon   (14.05.2006 в 21:41)   письмо автору
 
   для: 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, и т.п.)

   
 
 автор: Evgen   (14.05.2006 в 21:39)   письмо автору
 
   для: Trianon   (14.05.2006 в 21:23)
 

>... А символьные данные обязаны оформлять в виде
>символьных строк, т.е. сам текст брать в кавычки,
>экранировать кавычки...

А почему текст, задаваемый явно, не требует никаких экранирований и т.п.
Это

INSERT INTO customers VALUE ("Adam Smit");

будет правильно?

   
 
 автор: Evgen   (14.05.2006 в 21:48)   письмо автору
 
   для: Evgen   (14.05.2006 в 21:39)
 

Спасибо за разъяснение!

PS. Че-то интересное со связью происходит... Ответ приходит раньше чем вопрос!
Или не со связью ...

   
 
 автор: Trianon   (14.05.2006 в 22:03)   письмо автору
 
   для: Evgen   (14.05.2006 в 21:39)
 

Текст, задаваемый явно, тоже требует.
Это - правильно. Такую строку эта функция оставит без изменений. Но если в строке встретится кавычка (например O"Relly) то Вы вынуждены будете написать:
INSERT INTO customers VALUE ("O\"Relly");
иначе получите ошибку синтаксиса.

И функция mysql_escape_string проделает ту же работу.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования