|
|
|
| есть переменные $module и $id, где первая переменная строка, а вторая число
как правильнее составить запрос:
"SELECT * FROM `{$module}` WHERE `id`='$id'"
"SELECT * FROM `'.$module.'` WHERE `id`=$id" | |
|
|
|
|
|
|
|
для: Bvz
(15.08.2010 в 12:28)
| | а что второй вариант тоже работает? | |
|
|
|
|
|
|
|
для: Bvz
(15.08.2010 в 12:28)
| | неправильны оба. | |
|
|
|
|
|
|
|
для: Trianon
(15.08.2010 в 12:38)
| | а как правильно? | |
|
|
|
|
|
|
|
|
для: Trianon
(15.08.2010 в 13:20)
| | если я правильно понял, то запрос будет выглядеть так:
"SELECT * FROM '$module' WHERE `id`=$id AND `main`=1 AND `name`='Вася'"
а если функция добавляется, то так '".функция."' | |
|
|
|
|
|
|
|
для: Bvz
(16.08.2010 в 12:46)
| | $module вообще подставляться не должен.
Но если подставляется, то окружать имя таблицы нужно точно `также` как и имя поля.
Функция никак не добавляется. Добавляется фрагмент запроса - со всеми вытекающими рисками.
Точно также подставить $name вместо Вася - не выйдет. | |
|
|
|
|
|
|
|
для: Trianon
(16.08.2010 в 12:58)
| | >$module вообще подставляться не должен.
почему, а как правильно?
>Но если подставляется, то окружать имя таблицы нужно точно `также` как и имя поля.
`$module` - понял
>Функция никак не добавляется. Добавляется фрагмент запроса - со всеми вытекающими рисками.
а вот это password='".mysql_real_escape_string($password)."'
>Точно также подставить $name вместо Вася - не выйдет.
что именно не выйдет? `name`='$name' разве не выйдет, почему? | |
|
|
|
|
|
|
|
для: Bvz
(16.08.2010 в 13:14)
| | >>$module вообще подставляться не должен.
>почему, а как правильно?
Потому что имя таблицы не должно зависеть от прикладных данных.
>
>>Но если подставляется, то окружать имя таблицы нужно точно `также` как и имя поля.
>`$module` - понял
>
>
>>Функция никак не добавляется. Добавляется фрагмент запроса - со всеми вытекающими рисками.
>а вот это password='".mysql_real_escape_string($password)."'
в этом случае (если mysql_real_escape_string окружается апострофами) - это как раз пример устранения такого риска.
>
>>Точно также подставить $name вместо Вася - не выйдет.
>что именно не выйдет? `name`='$name' разве не выйдет, почему?
Именно потому, что mysql_real_escape_string не применен. | |
|
|
|
|
|
|
|
для: Trianon
(16.08.2010 в 17:47)
| | >>>$module вообще подставляться не должен.
>>почему, а как правильно?
>
>Потому что имя таблицы не должно зависеть от прикладных данных.
>
т.е. можно добавлять через mysql_real_escape_string или можно просто в кавычки обернуть?
>>>Функция никак не добавляется. Добавляется фрагмент запроса - со всеми вытекающими рисками.
>>а вот это password='".mysql_real_escape_string($password)."'
>
>в этом случае (если mysql_real_escape_string окружается апострофами) - это как раз пример устранения такого риска.
а точки внутри нужны и в каких случаях их ставить?
>>>Точно также подставить $name вместо Вася - не выйдет.
>>что именно не выйдет? `name`='$name' разве не выйдет, почему?
>
>Именно потому, что mysql_real_escape_string не применен.
т.е. любую строковую переменную нужно пропускать через mysql_real_escape_string или только ту, что поступает извне? | |
|
|
|
|
|
|
|
для: Bvz
(16.08.2010 в 18:41)
| | >>>>$module вообще подставляться не должен.
>>>почему, а как правильно?
>>
>>Потому что имя таблицы не должно зависеть от прикладных данных.
>>
>т.е. можно добавлять через mysql_real_escape_string или можно просто в кавычки обернуть?
в какие кавычки?
перечитывайте ответ.
>>>>Функция никак не добавляется. Добавляется фрагмент запроса - со всеми вытекающими рисками.
>>>а вот это password='".mysql_real_escape_string($password)."'
>>
>>в этом случае (если mysql_real_escape_string окружается апострофами) - это как раз пример устранения такого риска.
>
>а точки внутри нужны и в каких случаях их ставить?
внутри строки никаких точек нет. разбирайтесь со строковыми операциями языка PHP - не SQL.
>>>>Точно также подставить $name вместо Вася - не выйдет.
>>>что именно не выйдет? `name`='$name' разве не выйдет, почему?
>>
>>Именно потому, что mysql_real_escape_string не применен.
>
>т.е. любую строковую переменную нужно пропускать через mysql_real_escape_string или только ту, что поступает извне?
Любое строковое значение, оборачиваемое апострофами, независимо от того, из переменной она или еще откуда. Для констант, не содержащих спецсимволов допустимо сделать исключение. Но и только лишь. | |
|
|
|
|
|
|
|
для: Trianon
(16.08.2010 в 22:57)
| | спасибо многое стало на места, а как поступать с числом в запросе в случае если она явно задается, то число идет без апострофов, а если как переменная задается $id например? | |
|
|
|
|
|
|
|
для: Bvz
(17.08.2010 в 08:00)
| |
" ... WHERE id = ".((int)$id)
|
| |
|
|
|
|
|
|
|
для: Trianon
(17.08.2010 в 10:16)
| | т.е. получиться должно примерно так:
"SELECT * FROM `module`
WHERE `module`='".mysql_real_escape_string($module)."'
AND `id`='".((int)$id)."'
|
и если $module и $id поступают из $_GET, $_POST, $_COOKIE и $_REQUEST, то их нужно обработать:
<?php
$id = intval($_GET['id']);
$module = get_magic_quotes_gpc() ? stripslashes($_POST['module']) : $_POST['module'];
?>
|
правильно?
а можно заменить?
<?php
$module= MagicQuotes($_POST['module']);
function MagicQuotes($module)
{
$module = get_magic_quotes_gpc() ? stripslashes($module) : $module;
$module = trim($module);
return $module;
};
?>
|
| |
|
|
|
|
|
|
|
для: Bvz
(22.08.2010 в 03:43)
| | да, как-то так.
правда неясно зачем trim в функции, и почему её параметр аргумент называется module. | |
|
|
|
|
|
|
|
для: Trianon
(22.08.2010 в 10:26)
| | можно убрать?
<?php
function MagicQuotes()
{
$module = get_magic_quotes_gpc() ? stripslashes($module) : $module;
$module = trim($module);
return $module;
};
?>
|
а разве не нужно убирать пробелы? и где это лучше сделать? | |
|
|
|