Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > запрос проходит в PMA но не проходит из пхп


Автор: kr3v3tkus 1.10.2008, 01:55
branches
  • ID    int(11)
  • Name    binary(30)
  • Adress    varchar(70)
  • Phone    varchar(20)
employees
  • ID    int(3)
  • F    binary(20)
  • I    binary(20)
  • O    binary(20)
  • Position    binary(20)
  • Salary    int(5)
  • Adress    binary(70)
  • Phone    binary(20)
  • Branch    int(2) - это внешний ключ
Код

<?php
error_reporting(E_ALL);

$link = mysql_connect("localhost", "root", "1")
or die("Не могу подключиться");
print ("Соединение выполнено");

mysql_select_db('bank', $link) or die ('Не могу выбрать БД');

$query = "insert into branches(`ID`, `Name`, `Adress`, `Phone`) values(Null, 'Филиал №1', 'Россия, Новороссийск, Герцена 13', '26-52-11');";

$result=mysql_query($query);

mysql_close($link);

?>


Если в пма всунуть 
Код
insert into branches(`ID`, `Name`, `Adress`, `Phone`) values(Null, 'Филиал №1', 'Россия, Новороссийск, Герцена 13', '26-52-11');
 - всё ок. Я думаю это изза внешнего ключа, тк при создании новых записей в таблице branches, пма ругался на то, что в таблице employees никто не ссылается на эту запись внешним ключом. Я создал в employees ещё запись, в которой есть ссылка на 2ой ID таблицы branches, и вот собственно сабж

да, и извиняюсь за оффтоп - просто стыдно уже писать про кодировку... вобщем перелопатил все статьи и мануалы про set names итд, ничего не помогает, указываю одинаковые кодировки и в my.ini дефолтом, и при создании таблицы, и в самом скрипте - ничего не помогает, пришлось binary ставить. версия php 5.2.1, mysql 4.3.3.2 подскажите что почитать на эту тему пожалуйста

Автор: sTa1kEr 1.10.2008, 09:12
kr3v3tkus, http://forum.vingrad.ru/articles/topic-206796.html
Цитата

Если происходят проблемы с mysql, то надо вызывать функцию mysql_error() которая напишет, какие проблемы были в запросе.

Автор: kr3v3tkus 1.10.2008, 23:41
sTa1kEr, 
спасибо smile действительно стыдно становится после такого
Цитата

P.S. Я в курсе, что из тех, кому он предназначается, этот текст не прочтет никто. Но наболело =)


но просто времени нет чтобы полноценно сесть и изучить :( а проблема была в том, что писало, что не хочет влезать в поле адресс, хотя я вставлял 32 символа в ячейку с 70 символами, убрал кодировку из varchar cp1251 в бинари и пошло... и всё же я извиняюсь - но что это за гадкие ошибки с кодировкой? Право не знаю уже что и думать...  вот ещё - отличительный симптом - из скрипта всё добавляется, а из пма если сделать запрос - добавляет иероглифами

Автор: sTa1kEr 2.10.2008, 11:02
Цитата(kr3v3tkus @  2.10.2008,  00:41 Найти цитируемый пост)
убрал кодировку из varchar cp1251 в бинари 

Нет такой кодировки - бинари. Есть только бинарный тип данных и сравнение в бинарном режиме.
Цитата(kr3v3tkus @  2.10.2008,  00:41 Найти цитируемый пост)
но что это за гадкие ошибки с кодировкой? 

Да все же предельно просто. Есть всего два простейших правила:
1. Для всех таблиц указываешь один подходящий collation (саму кодировку можно не указывать, т.к. collation содержит ее в себе) в которой будут храниться и сортироваться данные. 
Код

CREATE TABLE ... COLLATE utf_unicode_ci

2. При каждом коннекте к этой базе устанавливаешь (через SET NAMES) кодировку в которой работает сам скрипт (совершенно не обязательно эта кодировка должна соответствовать кодировки в которой хранятся данные)
Код

<meta http-equiv="content-type" content="text/html; charset=cp1251" />
...
<?php
mysql_query('SET NAMES cp1251');


Все! И нету никакой мистики.


Цитата(kr3v3tkus @  1.10.2008,  02:55 Найти цитируемый пост)
подскажите что почитать на эту тему пожалуйста 

http://dev.mysql.com/doc/refman/4.1/en/charset.html

Автор: kr3v3tkus 4.10.2008, 00:38
sTa1kEr, 
ну я и не говорил что это кодировка, просто пишу хуже детсада smile а вообще большое спасибо - сам бы год разбирался с такими особенностями smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)