Forum Webscript.Ru

Общие => Базы данных => Тема начата: tarya от 29 Июля 2002, 12:17:08

Название: INSERT
Отправлено: tarya от 29 Июля 2002, 12:17:08
добрый день, сегодня решил наконецто попробовать пользоваться базой. программой MYSQL Front создал таблицу, и в нем всего 3 поля, теперь решил туда внести данные который будут использоваться счетчиком. посмотрев книжку по PHP написал код
$db_conn = mysql_connect ("10.0.0.1", "vasya", "vasya") or die ("not connect");
mysql_select_db ("taras", $db_conn) or die ("not select");
$query = "INSERT INTO cout VALUES (NULL, \'100.0.0.1\', \'0\', \'0\')";
mysql_query($sql);
?>

но чтотот не то, ни чего не вносится, ребята научите профана как вносить данные, а далее я разберусь,... -спасибо
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 12:21:35
У тебя три поля, а ты вносишь 4.

У тебя стоит or die при коннекте и выборе из базы, а при запросе - там, где и случаются всегда ошибки - нет.
пиши
mysql_query($sql) or die(mysql_error());
Название: INSERT
Отправлено: fidget от 29 Июля 2002, 12:22:18
tarya
во-первых существует такая хорошая функция как mysql_error(), которая тебе будет выводить ошибки.
Во-вторых было бы неплохо структуру таблицы предоставить.
Название: INSERT
Отправлено: Tankist от 29 Июля 2002, 12:22:40
по идее нормал, только надеюсь что это - опечатка:
Цитировать
$query = "INSERT INTO cout VALUES (NULL, \'100.0.0.1\', \'0\', \'0\')";
mysql_query($sql);

А вроде на первый взглядвсе ОК.
Название: INSERT
Отправлено: tarya от 29 Июля 2002, 12:28:03
ага, ситуация такая, я создал таблицу, назвал ее - cout, в ней поля "ip", "host", "hits"

ну и как бы хотелось чтото написать в них, какие то первый значения
Название: INSERT
Отправлено: ThE0ReTiC от 29 Июля 2002, 12:35:48

$ip = \'127.0.0.1\';
$host = \'localhost\';
$hits = 1;
mysql_query(insert into cout values(\'$ip\',\'$host\',\'$hits\')) or die(mysql_error());
?>
Название: INSERT
Отправлено: Alexandr от 29 Июля 2002, 12:43:45
ThE0ReTiC только наверно так:

$ip = \'127.0.0.1\';
$host = \'localhost\';
$hits = 1;
mysql_query("insert into cout values(\'$ip\',\'$host\',\'$hits\')") or die(mysql_error());
?>
Название: INSERT
Отправлено: ThE0ReTiC от 29 Июля 2002, 12:45:19
Alexandr
Угу. Именно так.
Описался. :)
Название: INSERT
Отправлено: tarya от 29 Июля 2002, 12:47:33
ребята получился короче говоря в конце концов такой код
$ip = "127.0.0.1";
$host = 0;
$hits = 0;

$db_conn = mysql_connect ("10.0.0.1", "tarya", "pass") or die ("not connect");
mysql_select_db ("taras", $db_conn) or die ("not select");
mysql_query("insert into cout values(\'$ip\',\'$host\',\'$hits\')") or die(mysql_error());
?>


выводит в конце такую ошибку -- Table \'taras.cout\' doesn\'t exist
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 12:48:24
tarya
в базу пишут, обычно, не так.
пишут ip (4 байта), время(4 байта), посещенная страница(2 байта), броузер (2 байта)
еще можно сделать таблицу с реферерами.
Хост хранить - только место тратить.

Но это уже в этой теме оффтопик.
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 12:49:33
тебе перевести? :-)
Название: INSERT
Отправлено: ThE0ReTiC от 29 Июля 2002, 12:50:18
tarya
Такой таблицы нет :)
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 12:52:18
Хотя, если нужен только счетчик, без разбивки по дням, то, в принципе, нормально.
только добавлять надо двумя запросами.
сначала запросить, есть ли такой ip, если есть то update count set hits=hits+1 where ip=\'$ip\'
а если нет - то insert
Название: INSERT
Отправлено: tarya от 29 Июля 2002, 12:55:23
все, я разобрался в чем вся ж, просто я неправильно создал таблицу, таблицу создал не "cout"  а " cout"  вот и ошибки
Название: INSERT
Отправлено: tarya от 29 Июля 2002, 12:57:03
ураааааааааааа, чтто зароботало!
Название: INSERT
Отправлено: tarya от 29 Июля 2002, 12:58:40
А вот еще непонятка небольшая, я вносил "127.0.0.1" а результат "127" было занесено, как так? может более 3 знаков нельзя?
Название: INSERT
Отправлено: ThE0ReTiC от 29 Июля 2002, 12:59:33
tarya
А какой длины и типа у тебя поле, в которое ты это вносишь?
Название: INSERT
Отправлено: tarya от 29 Июля 2002, 13:04:06
у меня поле "TINYINT" , было 3 знака, поменял на 10 но все равно 3 заносится :(
Название: INSERT
Отправлено: ThE0ReTiC от 29 Июля 2002, 13:05:24
tarya Родной, ты ж строку заносишь
либо меняй на Varchar(15), либо убирай точки.
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 13:05:46
tinyint - это число от 0 до 255
ты описание этого типа поля читал, перед тем, как использовать?
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 13:07:00
менять надо на int ;-)
Хотя для такого счетчика - не особо важно.
Название: INSERT
Отправлено: tarya от 29 Июля 2002, 13:12:54
спасибо чтот подсказываете, вот теперь последнее разобраться осталось, как сделать обновление записей? как написать запрос? спасибо что помогаете
Название: INSERT
Отправлено: ThE0ReTiC от 29 Июля 2002, 13:14:41
tarya
UPDATE cout SET hits=hits+1 WHERE ip=\'$ip\'
Название: INSERT
Отправлено: tarya от 29 Июля 2002, 13:21:34
hits=hits+1    это означает что hits+1 ? тоесть с увеличением?, как мне просто написать чтоб без увеличения, увеличивать переменную я буду через ПХП,....

UPDATE cout SET hits WHERE ip=\'$ip\'
получается запись такая - "ОБНОВИТЬ (в таблице cout) поле hits и  ip


? примерно правильно понял?
Название: INSERT
Отправлено: ThE0ReTiC от 29 Июля 2002, 13:24:06
tarya
Цитировать
UPDATE cout SET hits WHERE ip=\'$ip\'

SET hits=\'$hits\' WHERE ip=\'$ip\'
Обновляет hits в строке, в которой ip=$ip
Название: INSERT
Отправлено: fidget от 29 Июля 2002, 13:25:23
Цитировать
UPDATE cout SET hits WHERE ip=\'$ip\'

 UPDATE cout SET hits=$hits where ip=$ip
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 13:29:07
tarya
Форумы, это, конечно, хорошо...
Но в сети есть и учебники по mysql, и сайты для новичков...
Спорим, Теоретику скоро надоест отвечать на вопросы, которые можно посмотреть в учебнике? ;-)
Название: INSERT
Отправлено: ThE0ReTiC от 29 Июля 2002, 13:30:44
RomikChef
Угу - мне уже надоело.
На сегодня лимит исчерпан.
:)
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 13:39:36
собственно, запросы
SELECT
INSERT
UPDATE
DELETE
основные. Их надо знать до того, как начнешь делать хоть что-то.
http://www.myphp.dem.ru/
Название: INSERT
Отправлено: ThE0ReTiC от 29 Июля 2002, 13:40:12
tarya
http://www.mysql.ru
Читай...
Название: INSERT
Отправлено: tarya от 29 Июля 2002, 14:21:11
ребята, я понимаю чтот заколебал вас конечно, но последний вопросик может своим вниманием уделите.
какой тип данных должен быть для полей?
для текста? и как еще интересно в поле id заносится последовательно 1,2,3,4...... при новой записи,... плиз помогите, пока отыщю к доках пол дня пройдет
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 14:25:51
Для текстов, которые длиной меньше, чем 255 символов - varchar
Больше - text

Автоинкрементный id созадется так:
CREATE TABLE table (
id int unsigned NOT NULL auto_increment,
pole1 varchar,
... другие поля
PRIMARY KEY (id)
);
Название: INSERT
Отправлено: ThE0ReTiC от 29 Июля 2002, 14:26:08
http://www.mysql.ru/docs/pautov/sql.htm
Цитировать

Номер столбца может иметь дополнительное ключевое слово AUTO_INCREMENT, чтобы автоматически получить номер = самый большой номер столбца + 1 для каждой вставки, в которой номер столбца = 0 или NULL. ТО ЕСТЬ, если Вы попробуете вставить значение ноля в числовой столбец, который имеет атрибут AUTO_INCREMENT, Вы получите номер столбца, который на 1 большим, чем самый большой предварительно использованный номер.
Название: INSERT
Отправлено: Alexandr от 29 Июля 2002, 14:26:23
Цитировать
для текста?

char, varchar, text
Цитировать
в поле id заносится последовательно 1,2,3,4

объявляешь поле как
id int(11) NOT NULL auto_increment
, а когда инсертишь, то NULL
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 14:28:18
Э...
при новой записи оно само появляется, если не писать туда никаких чисел.
Название: INSERT
Отправлено: Alexandr от 29 Июля 2002, 14:33:05
Цитировать
при новой записи оно само появляется, если не писать туда никаких чисел

В смысле? Пример....
Название: INSERT
Отправлено: tarya от 29 Июля 2002, 14:40:12
при создании как вы научили -TYPE -int, not null, autoincrement выдается ошибка -"incorrect table definition; there can only be one auto column and it be difined as a key"

чтоо делатьь что делать? :(
Название: INSERT
Отправлено: ThE0ReTiC от 29 Июля 2002, 14:52:07
tarya
Цитировать
чтоо делатьь что делать

Внимательней читать доки... :)
Create table cout(
id int not null auto_increment primary key,
...
)
Alexandr
Так. Ща ругаться начну... :mad:
create table test(
id ... auto_increment...
filed2 ...
filed3 ...
filed4...
)
insert into table test(filed2,filed3,filed4) values(\'$value1\',\'$value2\',\'$value3\')

id автоматом увеличится.
Пробуйте :)
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 14:55:32
или так
insert into table test values(NULL,\'$value1\',\'$value2\',\'$value3\')
то есть, если среди вводимых полей указывать id, то тогда присваивать ему значение NULL, или 0.
Оно увеличится.

Какое еще у тебя там TYPE autoincrement?
Название: INSERT
Отправлено: tarya от 29 Июля 2002, 15:00:17
ребята родимые не ругайтесь, я пользуюсь MySQL Front только разбераться начинаю,.. спасибо
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 15:04:19
А ВОТ НЕ НАДО MYSQL FRONT пользоваться!
РУКАМИ надо, чтобы в голове что-то застревало!
Название: INSERT
Отправлено: tarya от 29 Июля 2002, 15:13:01
я бы руками начал делать да вот консолько нету у меня откуда мне писать все это, вы уж простите,...
но пока чтотот начало получаться,,  с полями начал разбираться,... :)
Название: INSERT
Отправлено: Alexandr от 29 Июля 2002, 15:29:56
ThE0ReTiC
Цитировать
create table test(
id ... auto_increment...
filed2 ...
filed3 ...
filed4...
)

Надо так
create table test(
id ... auto_increment...
filed2 ...
filed3 ...
filed4...
PRIMARY KEY (id)
)
Название: INSERT
Отправлено: ThE0ReTiC от 29 Июля 2002, 15:32:47
Alexandr
Надо говорить не надо, потому, что можно сделать и так:

id ... not null primary key auto_increment,
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 15:39:02
tarya
окей, в этом фронте есть окно ввода запросов?
вот туда и вводи, и таблицы создавай только так.
Написал запрос CREATE TABLE - скоипровал туда - исполнил - посмотрел, что ответила MySQL
Название: INSERT
Отправлено: fidget от 29 Июля 2002, 15:39:38
Alexandr
auto_increment должен быть обязательно проидексирован, но совсем не обязательно он должен быть primary key ;)
Название: INSERT
Отправлено: fidget от 29 Июля 2002, 15:42:29
Цитировать
я бы руками начал делать да вот консолько нету у меня откуда мне писать все это, вы уж простите,...


так заведи себе консольку ;)
если ты под виндой работаешь, то поставь себе MySQL и с помощью mysql.exe работай. Это консольное приложение.
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 15:48:46
fidget
в mysql - обязательно.
Ну разве что, составной.
Другое дело, что если не указать, муська сама его праймари сделает
Название: INSERT
Отправлено: fidget от 29 Июля 2002, 15:55:08
RomikChef
не знаешь - не говори.

в MySQL - не обязательно ;)

mysql> create table test(
    -> id int auto_increment,
    -> index(id));
Query OK, 0 rows affected (0.01 sec)

mysql> insert into test values
    -> (1),(2),(1);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test;
+----+
| id |
+----+
|  1 |
|  1 |
|  2 |
+----+
3 rows in set (0.01 sec)
Название: INSERT
Отправлено: Меняздесьдавнонет от 29 Июля 2002, 16:09:19
Мда, пожалуй, ошибся.