|
|
|
| Подскажите пожалуйса
Написал сайт (разрабатывал на локальном сервере), когда разместил появились непонятные проблемы- перестали работать некоторые запросы а, точнее, те в которых встречались строки.
Например:
select 1=1 -выполняется нормально
select 'q'='q' - ошибка, и так вегда если в запросе есть строки, почему ?
привожу код в котором это тестировал:
<form>
<input TYPE="text" name = "qq" SIZE="150">
<input TYPE="submit">
</form>
<?
if(isset($qq))
{
$l_conn = mysql_connect("***","***", "***");
$result=mysql_db_query("***",$qq,$l_conn);
if(!$result)
{
echo $result;
echo mysql_error($l_conn);
}
while($line = mysql_fetch_array($result))
echo "<br>".$line[0];
}
?> | |
|
|
|
|
|
|
|
для: han
(15.12.2005 в 15:50)
| | А версия MySQL на сервере какая используется? Вообще не должно быть такого... | |
|
|
|
|
|
|
|
для: cheops
(15.12.2005 в 22:20)
| | Версия MySQL - 4.1.0-alpha-log
Программа и MySQL - находятся на разных хостах
при загрузке БД произошло повреждение кодировки, может из за этого что-то не правильно - из-за настроек кодировки не работают строковые функции ?
Хотя Insert работает и строки вставляются (русские с поврежденной кодировкой все заменяется на ????????) | |
|
|
|
|
|
|
|
для: han
(16.12.2005 в 08:54)
| | >Программа и MySQL - находятся на разных хостах
а сервер БД позволяет удаленное подключение? Что говорит хостер? | |
|
|
|
|
|
|
|
для: Loki
(16.12.2005 в 09:16)
| | Удаленные подключения позволяет, и некоторые SQL - запросы выполняюся корректно а некоторые нет (см. 1-е сообщение) | |
|
|
|
|
|
|
|
для: han
(16.12.2005 в 08:54)
| | alpha?! Это кому в голову взбрело alpha на сервер ставить? Обычно даже бетту не ставят, так как она содержит незначительные ошибки, а для alpha такие ошибки подобные тем, которые вы указали, рядовое явление - это очень сырая версия, которая обычно используется для отладки и поиска ошибок в продукте.
PS Проблема замены русских букв на ??????? можно решить так как это описывается в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=8208 | |
|
|
|
|
|
|
|
для: cheops
(16.12.2005 в 13:47)
| |
<?php
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
?>
|
в моей версии (version---4.1.0-alpha-log) только переменные (найденные по SHOW SESSION VARIABLES):
character_set
character_sets
client_collation
convert_result_charset
причем при set caracter_set - пишет что такой переменной нет
client_collation не устанавливается и после SET client_collation = 'cp1251_general_ci'
все равно остается со значением latin1_swedish_ci
convert_result_charset - принимает два значения ON,OFF она вставляется нормально
может знаете, что делать ?
сменить сервер к сожалению не вариант | |
|
|
|
|
|
|
|
для: han
(19.12.2005 в 14:34)
| | А установка convert_result_charset в ON не приводит к появлению других переменных? | |
|
|
|
|
|
|
|
для: cheops
(19.12.2005 в 14:43)
| | она стоит в ON по умолчанию | |
|
|
|
|
|
|
|
для: cheops
(19.12.2005 в 14:43)
| | вообщемто все заработало, только не понял почему
у меня до этого таблицы создавалиль как CHARSET=cp1251
и при выводе в браузер они были (????????)
заменил на utf8 - заработало хотя кодировка отображения в браузере - 1251
а никаких переменных не менял | |
|
|
|
|
|
|
|
для: han
(19.12.2005 в 16:57)
| | Проблемы могут быть с поиском и сортировкой русского текста... | |
|
|
|
|
|
|
|
для: cheops
(19.12.2005 в 18:45)
| | Действительно появились проблемы с поиском select * where name='Имя' - выдает 0 строк при всегда,
вне зависимости есть такая запись или нет | |
|
|
|
|
|
|
|
для: han
(15.12.2005 в 15:50)
| | нашел косяк, только не могу понять почему он возникает, все дело в том
что когда я заускал этот скрипт на локальном сервере то
при вводе запроса в виде select 'q'='q' именно такой запрос у меня и отправлялся к MySQL
а когда сайт перенесли на хост, то когда я ввожу этот запрос то отправляется
: select \'q\'=\'q\' т.е. он почему-то добавляет лишние \
не подскажите отчего это | |
|
|
|
|
|
|
|
для: han
(19.12.2005 в 12:30)
| | Это защита от инъекций. Перед отправкой запроса воспользуйтесь функцией stripslashes
<?php
$str = "Is your name O\'reilly?";
// выводит: Is your name O'reilly?
echo stripslashes($str);
?>
|
| |
|
|
|