|
|
|
| Привет! Мне нужно передать строковую переменную sql запрос, содержащий ковычки и апострофы. Почему то не получается. Пока что передаю кучу переменных для запроса и запрос строю уже на новой странице. Хотелось бы упростить скрипт | |
|
|
|
|
|
|
|
для: PyccHeBa
(26.09.2007 в 04:37)
| | Попробуйте обработать запрос с помощью urlencode().
Только потом не удивляйтесь, если этот запрос кто-нибудь немного "подправит". | |
|
|
|
|
|
|
|
для: kasmanaft
(26.09.2007 в 05:50)
| | Помогает!! А какие могут быть проблемы? Как запрос могут подправить? | |
|
|
|
|
|
|
|
для: kasmanaft
(26.09.2007 в 05:50)
| | Помогает!! А какие могут быть проблемы? Как запрос могут подправить? Данные могут снести из базы что-ли? | |
|
|
|
|
|
|
|
для: PyccHeBa
(27.09.2007 в 00:11)
| | да, скл-инъекцией, перед подстановкой значений в запрос обабатывайте их mysql_escape_string() | |
|
|
|
|
|
|
|
для: bronenos
(27.09.2007 в 00:29)
| | у меня данные и так передаются со слэшами перед апострофами. А вот как избаваться от слэшев не знаю, sql не принимает запрос, содержащий слеши | |
|
|
|
|
|
|
|
для: PyccHeBa
(27.09.2007 в 00:11)
| | Как я понял, Вы в урле передаете весь sql запрос, так ведь?
Этот запрос может изменить кто угодно, кто увидит такой урл. Например, вместо "SELECT * FROM `users` " напишет "TRUNCATE TABLE `users`". Без проблем может посмотреть пароль админа, изменить при надобности.. Да что угодно.
> А вот как избаваться от слэшев не знаю, sql не принимает запрос, содержащий слеши
Можно попробовать stripslashes(), но лучше об этой затее забыть вообще. | |
|
|
|
|
|
|
|
для: kasmanaft
(27.09.2007 в 08:13)
| | Да.... передавать запрос в адресной строке плохая идея.
Может мне стоит вообще сделать полностью по другому.
Кто может дать наводку как удобнее всего записать данные в csv файл из sql запроса?
select into outfile очень хорошая вещь, но он не сработает если файл уже существует. Нумеровать кучу файлов не вариант. Нужно чтобы запрос писал данные в один csv файл. | |
|
|
|
|
|
|
|
для: PyccHeBa
(28.09.2007 в 03:37)
| | Расскажите для чего Вы всё это делаете, а то так трудно советовать.
Может быть можно эти скрипты объединить? или include..
Может быть сохранить все параметры для запроса в сесии?
И если первый скрипт откуда-то достал эти параметры, почему их не может добыть второй? | |
|
|
|
|
|
|
|
для: kasmanaft
(28.09.2007 в 15:03)
| | У меня выводиться на экран таблица (не более 500 строк) с данными из sql запроса. Там лимит 500. А сверху ссылка "скачать все". Ссылка на файл php в котором делается полный запрос без лимита и потом данные сохраняются в csv файл и файл скачивается. Сам файл php ничего не отображает, он делает запрос, создает файл посылает его на юзеру аттачмент вот так вот
Странно то что у меня абсолютно две одинаковые страницы, одна работает, а другая вместо того чтобы открыть csv файл, выводит данные в браузере. Почему не могу разобраться. Запросы работают отлично. В файлы все записывается.
Я знаю что можно как то проще построить csv файл, но пока делаю так.
<?
require('includes/config.php');
require('includes/db_connect.php');
//we will outputting a EXCEL file
$sqlCond= $HTTP_GET_VARS['sqlCond'];
$sqlCond = stripslashes($sqlCond);
$SqlFull = тут мой запросик
$result = mysql_query($SqlFull);
тут делаем файлик
header('Content-type: application/xls');
header('Content-Disposition: attachment; filename="файлик.csv"');
readfile('файлик.csv');
?> | |
|
|
|
|
|
|
|
для: PyccHeBa
(29.09.2007 в 01:31)
| | Ухх..... С облегчением вздыхаю два дня копал код, перелопачивал. Оказалось в одном из инклюдов проблемного файла были переносы строк. Это и было причиной что файл не скачивался, а отображался в браузере.
Файл я строю довольно рутинно по строкам.
$i = 0;
$str2="";
$file_handle=fopen("newcsv.csv",'w');
$j = mysql_num_fields($result) ;
while ($i < $j ) {
$meta = mysql_fetch_field($result, $i);
if($i == $j-1 ) $str2 .= "$meta->name \n";
else $str2 .= "$meta->name,";
$i++;
}
fputs($file_handle,$str2);
$x = 0;
$str2 ="";
while($row = mysql_fetch_array($result)){
$i=0;
while ($i < $j) {
if($i == $j-1 )$str2 .= "$row[$i] \n";
else $str2 .= "$row[$i]," ;
$i++;
}
fputs($file_handle,$str2);
$str2="";
$x++;
}
//write the last itsybitsy bit and cleanup
fputs($file_handle,$str2);
fclose($file_handle);
$str2="";
Можно как то делать это проще SELECT INTO OUTFILE но файл нельзя переписать если он уже существует. Может быть его стоит каждый раз стирать после скачки. Что думаете? | |
|
|
|
|
|
|
|
для: PyccHeBa
(29.09.2007 в 02:13)
| | Может быть стереть...
Может быть стирать только тогда, когда в новый файл будет отличаться от текущего (когда в БД что-нибудь обновилось).
Может быть создать новый файл с другим именем.
Обратите еще внимание на fputcsv()
По теме: как строится запрос? Тот скрипт, который его строит не может сам отдать файл?
Или тот, который файл отдает, не может сам построить запрос?
PS забудьте уже про $HTTP_GET_VARS (и его братьев), используйте $_GET. | |
|
|
|
|
|
|
|
для: kasmanaft
(29.09.2007 в 10:39)
| | Там пользователь сам выбирает параметры запроса. Маловероятно чтобы запросы повторялись.
Скрипт мой прекрасно работает. Но я подозреваю что SELECT * INTO OUTFILE будет работать быстрее. У меня 50 000 данных собирается в файл. Уходит до 1 минуты на создание файла. Так как он создается построчечно.
Хотелось бы проверить быстрее ли будет это делать SELECT * INTO OUTFILE
Прилаживаю его в скрипт, но вот не пойму где он файлы сохраняет? Пишется что запросик прошел. Но файла вообще не нахожу.
Что думаете? Будет ли скрипт выигрывать в скоросте? Будет ли быстрее с fputcs() ? | |
|
|
|