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

Форум MySQL

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

 

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

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

тема: В запрос не подставляются PHP-переменные
 
 автор: Alph[p]a   (21.08.2007 в 22:36)   письмо автору
 
 

Люди подскажите как правильно экранировать одинарные кавычки при SQL запросе?
пишу так

$add=mysql_query('INSERT INTO marks (short,count,added,article) VALUES ($_POST[link],0,$_POST[date],$_POST[articles])');

mysql_erroe выводит

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[link],0,$_POST[date],$_POST[articles])' at line 1

экранировал так

$add=mysql_query('INSERT INTO marks (short,count,added,article) VALUES (\'$_POST[link]\',\'0\',\'$_POST[date]\',\'$_POST[articles]\')');

но в таблицу лезут не значения полей POST а сами поля..например появляеться запись $_POST[date] что не есть хорошо)

   
 
 автор: cheops   (21.08.2007 в 22:55)   письмо автору
 
   для: Alph[p]a   (21.08.2007 в 22:36)
 

Для того, чтобы PHP-переменные интерполировались в строке, необходимо использовать двойные кавычки, в одинарных кавычках интерполяции не происходит.
<?php
$query 
"INSERT INTO marks (short,count,added,article) 
                  VALUES (
$_POST[link],0,$_POST[date],$_POST[articles])";
$add=mysql_query($query);
?>

   
 
 автор: Alph[p]a   (21.08.2007 в 22:58)   письмо автору
 
   для: cheops   (21.08.2007 в 22:55)
 

Спасибо....а жаль что не происходит...я все таки думал это я недоглядел.

   
 
 автор: lifead   (21.08.2007 в 22:59)   письмо автору
 
   для: Alph[p]a   (21.08.2007 в 22:36)
 

Вам здесь экранировать кавычки вам тут не требуется по той причине что ковычки служат указаниме для БД ч то с этого места начинается строка которую необходимо записать.
Попробуйте вот так:

<?
$s
=0;
$query=" insert into `marks` (`short`, `count`, `added`, `article`) VALUES (".$_POST['link'].",".$s.",".$_POST['date'].",".$_POST['articles'].")";
$add=mysql_query($query);
?>

Должно получится

   
 
 автор: lifead   (21.08.2007 в 23:00)   письмо автору
 
   для: lifead   (21.08.2007 в 22:59)
 

Да недоглядели обратные ковычки, и то что вы вставляете переменные, а не строки

   
 
 автор: Ralph   (22.08.2007 в 01:35)   письмо автору
 
   для: lifead   (21.08.2007 в 23:00)
 

Обратные кавычки здесь нужны лишь для столбца count...
И не забывать об одинарных кавычках,если ваша переменная-строка

   
 
 автор: lifead   (22.08.2007 в 08:27)   письмо автору
 
   для: Ralph   (22.08.2007 в 01:35)
 

я вот не огу понять зачем использовать упращенные варианты, Вы ведь тем самым заранее делать "дыры" в безопасности. Если человек учится, пусть он учится писать скрипт правильно, чтоб небыло потом вопросов, а почему здесь так а здесь так. Ведь при обращениии к MySQL необходимо и название таблицы и наименования столбцов заключать в обратные кавычки.

   
 
 автор: Faraon   (22.08.2007 в 08:59)   письмо автору
 
   для: lifead   (22.08.2007 в 08:27)
 

Не обязательно, обратные кавычки нужны только для полей названия которых совпадают с зарезервированными терминами в MYSQL, типа date, count и тд

   
 
 автор: Ralph   (22.08.2007 в 13:58)   письмо автору
 
   для: lifead   (22.08.2007 в 08:27)
 

Я думаю,если я имя столбца к примеру с именем fuckedcolumn пропишу не в переменной,а напрямую в запросе и не окружу ее обратными кавычками,то особой дыры в безопасности это не создаст :) А вот использование в запросе напрямую данных из массива POST...

   
 
 автор: lifead   (22.08.2007 в 15:28)   письмо автору
 
   для: Ralph   (22.08.2007 в 13:58)
 

Я тоже так считаю, что переменные напрямую нельзя вносить, они могут содержать все что угодно, поэтому я их перед "отправкой" в БД, подвергаю проверке и редактированию.

   
Rambler's Top100
вверх

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