SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.03.2010 21:32:20

Djumpen
Участник
Зарегистрирован: 22.03.2010
Сообщений: 7

Крик о помощи в MySQL

Привет, ПРОграммерам)
Вобщем в чем соль: полтора года юзал Денвер, но вот недавно понадобилось самостоятельно поставить связку пых+мускул+апаче. На первый взгляд все получилось. Компоненты взаимодействуют. НО. Все что я могу сделать MySQL - это создавать таблици. Ни читать данные, ни записывать неполучается. Подскажите, в какую сторону копать, чтоб добится результата?
Надеюсь на помощ, а то работа стоИт, пока не решу проблему.
Спасибо заранее.

Неактивен

 

#2 22.03.2010 21:44:22

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Крик о помощи в MySQL

А в чем заключается «не получается»?

Неактивен

 

#3 22.03.2010 22:26:37

Djumpen
Участник
Зарегистрирован: 22.03.2010
Сообщений: 7

Re: Крик о помощи в MySQL

Не выдает никаких ошибок либо предупреждений. Банально НЕ РЕАГИРУЕТ вообще никак. Лишь создаются таблици, остальные манипуляции будто закоментированы.

Неактивен

 

#4 22.03.2010 23:26:35

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Крик о помощи в MySQL

А у вас в php точно стоит вывод ошибок на экран? каков уровень предупреждений?
В Денвере-то все отстроено максимально изначально, а вот по умолчанию вроде апач все в лог кидает, а не на экран :-))).

В-скрипте попробуйте поставить

ini_set('display_errors', '1'); // Максимальная диагностика
error_reporting(E_ALL); // и вся на экран

ну и всю работу с mysql попробуйте на ошибки проверять примерно по тому принципу, который приведен в конце http://sqlinfo.ru/forum/viewtopic.php?id=2401. По порядку - создание таблицы, вставка туда записей, выборка


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 23.03.2010 02:29:02

Djumpen
Участник
Зарегистрирован: 22.03.2010
Сообщений: 7

Re: Крик о помощи в MySQL

Спасибо за отклик.
Я прошелся по пунктам, стало немного легче, но все же...
1) Подключение к базе происходит (это и так было ясно)
2) Таблицы создаются
3) Записи считываются (заносил через PhpMyAdmin)
4) Записи не вносятся (А именно INSERT и UPDATE)


$link = mysql_connect("localhost", "root", "**********")
        or die("Could not connect: " . mysql_error());
mysql_select_db('test');
ini_set('display_errors', '1');
error_reporting(E_ALL);
mysql_query("INSERT INTO test (name, user_id) VALUES ('test_name',' ');");
mysql_close();
 

Заодно всплыла еще одна проблема с кодировкой. Не читает руские символы (отвечает "????????"). Напротив каждой таблици в колонке "сравнение" пишет "cp1251_general_ci", но на главной странице
Пользователь: root@localhost
MySQL-кодировка: UTF-8 Unicode (utf8)

Таблица создана с параметром ENGINE=MyISAM DEFAULT CHARSET=cp1251, в my.ini => default-character-set=cp1251

Вот если б мне решить эти две проблемы, я был бы абсолютно счастливым человеком smile. Спасибо.

Отредактированно Djumpen (23.03.2010 02:47:04)

Неактивен

 

#6 23.03.2010 03:17:41

mekong
Участник
Зарегистрирован: 22.03.2010
Сообщений: 4

Re: Крик о помощи в MySQL

1.Для отладки вставьте функцию mysql_error после "подозрительного" INSERTa ->

mysql_query("INSERT INTO test (name, user_id) VALUES ('test_name',' ');");
echo mysql_errno() . ": " . mysql_error();

Что пишет?


2.  После mysql_select_db('test');
   Напишите
    mysql_query("SET NAMES cp1251");
    mysql_query("SET CHARACTER SET cp1251");
Закорючки(вопросики) остались?
Если да ,
то как Вы заносили эти данные
1) переносили со старого сервера
2) вводили в phpmyadmin
3) другой вариант
От этого зависит решение 2-й проблемы

Неактивен

 

#7 23.03.2010 03:28:47

Djumpen
Участник
Зарегистрирован: 22.03.2010
Сообщений: 7

Re: Крик о помощи в MySQL

1) Обогатился ошибкой при добавлении echo mysql_errno() . ": " . mysql_error();
а именно: 1366: Incorrect string value: '\xE8\xEC\xFF' for column 'name' at row 1

2) При добавлении   mysql_query("SET NAMES cp1251");    mysql_query("SET CHARACTER SET cp1251"); кодировка исправилась. Теперь при каждом подключении так задавать кодировку?

Жду дальнейших указаний по пункту 1.

Неактивен

 

#8 23.03.2010 03:52:32

mekong
Участник
Зарегистрирован: 22.03.2010
Сообщений: 4

Re: Крик о помощи в MySQL

1) Таблица тестовая - данных не жалко?
Выполняем очистку в phpmyadmin:
TRUNCATE TABLE test
или из php
mysql_query("TRUNCATE TABLE test");

Повторяем скрипт - ошибка осталась?
если да, пишем в phpmyadmin SHOW CREATE TABLE test;
Что выдает?

2) Да можно так и писать при подключении  - не вдаваясь в детали. Потом можно глянуть подробнее - кажется здесь в FAQ есть.

Отредактированно mekong (23.03.2010 03:54:04)

Неактивен

 

#9 23.03.2010 04:06:57

Djumpen
Участник
Зарегистрирован: 22.03.2010
Сообщений: 7

Re: Крик о помощи в MySQL

Свершилось! Можно сказать - я счастлив smile
В чем оказывается проблема: при выполнении INSERT`a скрипт не позволял задавать даже пустое значение для автоинкрементного поля. Тоесть поле user_id было именно такое и я задавал INSERT INTO test (name, user_id) VALUES ('Имя','');
При работе с денвером проблем не возникало, а вот сдесь.. Вобщем благодарен за уделенное время!

Напоследок хотел спросить о структуре БД. Проэктирую что то по типу мини-соц.сети. При регистрации пользователю выдается id. Логин/пароль хранятся в отдельной таблице. А сообщения, список друзей, настройки и т.д. планирую хранить так: для каждого пользователя создаются свои таблици "friends_".$id , "message_".$id , "settings_".$id
Подскажите, правильный ли такой подход? Или можна поступить мудрее?

Неактивен

 

#10 23.03.2010 04:25:08

mekong
Участник
Зарегистрирован: 22.03.2010
Сообщений: 4

Re: Крик о помощи в MySQL

1) да, в случае Вашего автоинкремента нужно писать INSERT INTO test (name) VALUES ('Имя');

2) КАТЕГОРИЧЕСКИ неправильно!
заводить для каждого юзера свою таблицу неправильно ни с точки зрения SQL, ни с точки зрения возможных ограничений.

Нужно делать примерно так (в очень общем виде например для сообщений)
таблица Messages
==============
message_id (уник. номер сообщения, автоинкремент)
message_date (дата сообщения)
message_from_id (id юзера1 - от кого)
message_to_id (id юзера2 - кому)
message_text

Djumpen написал:

Свершилось! Можно сказать - я счастлив smile
В чем оказывается проблема: при выполнении INSERT`a скрипт не позволял задавать даже пустое значение для автоинкрементного поля. Тоесть поле user_id было именно такое и я задавал INSERT INTO test (name, user_id) VALUES ('Имя','');
При работе с денвером проблем не возникало, а вот сдесь.. Вобщем благодарен за уделенное время!

Напоследок хотел спросить о структуре БД. Проэктирую что то по типу мини-соц.сети. При регистрации пользователю выдается id. Логин/пароль хранятся в отдельной таблице. А сообщения, список друзей, настройки и т.д. планирую хранить так: для каждого пользователя создаются свои таблици "friends_".$id , "message_".$id , "settings_".$id
Подскажите, правильный ли такой подход? Или можна поступить мудрее?

Неактивен

 

#11 23.03.2010 04:50:14

Djumpen
Участник
Зарегистрирован: 22.03.2010
Сообщений: 7

Re: Крик о помощи в MySQL

Ну а если в таблице наберется (в приоритете) сотни тысяч сообщений. Удобно ли будет делать выборку для каждого пользователя? С точки зрения быстродействия.

Неактивен

 

#12 23.03.2010 05:13:44

mekong
Участник
Зарегистрирован: 22.03.2010
Сообщений: 4

Re: Крик о помощи в MySQL

Нужно сразу строить индексы по полям message_from_id и message_to_id. И выборка будет работать быстро при сотнях тысячах. При еще больших объемах нужно учитывать множество дополнительных нюансов при проектировании базы и оптимизации MySQL.
Если Вы заведете таблицы сообщений, друзей, настроек и т д на каждого пользователя, то при большом количестве пользователей можно столкнуться например с ограничением на максимальное число одновременно открытых файлов.
В общем для того, чтобы использовать Ваш подход, нужно иметь серьезные аргументы, почему лучше делать так, а не более классически :-)

Неактивен

 

#13 23.03.2010 05:34:09

Djumpen
Участник
Зарегистрирован: 22.03.2010
Сообщений: 7

Re: Крик о помощи в MySQL

Ок, пойду переписывать свое творение smile
А насчет индексов по полям message_*_id если честно, немного не понял. Как их строить и главное - как они помогут в дальнейшем. Сори за облако вопросов. Слишком долго розбирался сам, вот решил все выплеснуть smile

Неактивен

 

#14 23.03.2010 13:16:45

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Крик о помощи в MySQL

Djumpen написал:

А насчет индексов по полям message_*_id если честно, немного не понял. Как их строить и главное - как они помогут в дальнейшем.

Или сразу при создании таблицы CREATE TABLE ... INDEX(message_from_id)...
Или позже ALTER TABLE `имя таблицы` ADD INDEX(message_from_id); (http://sqlinfo.ru/articles/info/12.html)

По поводу ?????? вместо русского текста см FAQ п3 - очень понятно описывается суть проблемы.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson