правильный запрос SELECT

правильный запрос SELECT

имееться таблица
PHP:
CREATE TABLE tovars (
  id varchar(7) NOT NULL default '',
  tovar varchar(100) NOT NULL default '',
  UNIQUE KEY id (id)
) TYPE=MyISAM;
id | tovar
1223 | привет
а567 | пока

имееться скрипт которому GET запросом, посылаю id
PHP:
$id = $_GET['id'];

$result = mysql_query("SELECT * FROM tovars WHERE id = $id", $link);
$row = mysql_fetch_array($result);
print_r($row);
если сделат запрос к скрипту по tovars.php?id=1223

находит в таблице id и все ok, но если tovars.php?id=а567

кричит следущее

mysql_fetch_array(): supplied argument is not a valid MySQL result resource

почему?

ps
WHERE id = '$id'
непомогает
 

Tigr

Новичок
ну вопервых нужно обрабатывать ошибочные ситуации, во вторых есть mysql_error() и echo "SELECT * FROM tovars WHERE id = $id";
 
1054: Unknown column 'a567' in 'where clause'

-~{}~ 19.05.04 16:43:

WHERE id = '$id'

при таком запросе tovars.php?id=а567 находит в таблице id и все ok....


если сделат запрос к скрипту по tovars.php?id=1223

echo mysql_errno() . ": " . mysql_error() . "\n";
выводит
0:
 

Tigr

Новичок
Текст в кавычки брать нужно id='$id' - id - у тебя может быть текстом, поэтому брать в кавычки обязательно.

0 значит - нет ошибок
 
при WHERE id ='$id'

SELECT * FROM tovars WHERE id = 'a567'

SELECT * FROM tovars WHERE id = '1223'

-~{}~ 19.05.04 16:50:

вот я и о том и говорю что если взять в кавычки, то текст находит а просто 1223 не видет,..
как быть... смотреть на передаваемые значения GET и из типа переменной уже выбирать SELECT ??
 

Tigr

Новичок
у тебя наверняка в 'a567' русская "а", а оба запроса правильные
 
[ тут мат, перемат ]...
вот из-за чего топик начался....
сорри, скорее так оно и есть

-~{}~ 19.05.04 17:01:

нет a не русская.. тема осталась открыта..

-~{}~ 19.05.04 17:03:

если брать в кавычки $id то не видит если $id = цифры , а если $id = string не видет , если наоборот, то string видет а цифры нет.
 

Falc

Новичок
Давай еще раз, какие резултаты выдают запросы:

SELECT * FROM tovars WHERE id = 'a567'

SELECT * FROM tovars WHERE id = '1223'


???
 

Tigr

Новичок
кавычки должны быть.

проверь какая "а" у тебя в tovars.php?id=а567 и в поле таблицы id
 
PHP:
$id = $_GET['id']; 
$result = mysql_query("SELECT * FROM tovars WHERE id = '$id'", $link); 
$row = mysql_fetch_array($result);
echo "SELECT * FROM tovars WHERE id = '$id' <br>";
echo mysql_errno() . ": " . mysql_error() . "\n";
 print_r($row);
tovar.php?id=q567

выводит:
SELECT * FROM tovars WHERE id = 'q567'
0: Array ( содержимое массива)

tovar.php?id=1223

выводит
SELECT * FROM tovars WHERE id = '1223'
0:

и всё...

в таблице много записей и примерно 50 на 50 id чисто просто цифры, и просто строки типа w345

все что строками всё ok выводит массив, там где цифры нет массива...
может стоит менять mysql ? что же еще ?
 

Tigr

Новичок
Да, сразу нужно было спросить из каких соображений идентификаторы типа varchar?
 

Falc

Новичок
nofx
Вариант:
SELECT * FROM tovars WHERE id = '1223'

Должен работать.

Какая версия мускула?
 

Tigr

Новичок
Возьми задай запрос SELECT * FROM tovars WHERE id = '1223'
в phpmyadmin, если пусто значит нет такого в таблице

-~{}~ 19.05.04 16:30:

Автор оригинала: nofx
тоесть просто стоит поменять тип id?
У тебя странности не из-за типа. Но такой тип выбранный в качестве индекса думаю в твоем случае ошибка, для чего вместо 2 для smallint использовать 7 байт

-~{}~ 19.05.04 16:34:

прочитай
http://dev.mysql.com/doc/mysql/ru/example-AUTO_INCREMENT.html
 
предыстория...
мне предоставили базу в тектовых файлах, тоесть папка в ней около 300 файлов txt

5678.txt
g768.txt

имя товара в имени файла, а внутри файла описаие товара...

я взял функцией просканил дерикторию где лежат файлы, получил список, читал содеожимого кажного файла в цикле получал содержимое ... из содержимого каждого брал id и описание , писал в таблицу...

после все происходит как я описывал... щас phpmyadmin
добаляю строку с id 4857 и все работает...

почему? :)

-~{}~ 19.05.04 17:39:

чего вместо 2 для smallint использовать 7 байт
да согласен.. я поменяю на smallint
и ссылку гляну... но на всякий случай ман по mysql у меня на чтении стоит.

-~{}~ 19.05.04 17:42:

[тут мат перемат!!!]
вопрос закрыт....
с файла также бралось \r и поэтому....
но почему со строкой все ok было?

-~{}~ 19.05.04 18:01:

есть id вида 0008 smallint режет передние нули...
varchar подходит или я опять заблуждаюсь...
 

Tigr

Новичок
имя файла в отдельное поле, id отдельное или autoincrement + переименование файла в id.txt без отдельного поля под имя файла

-~{}~ 19.05.04 17:08:

Автор оригинала: Winer
zerofill??? если нули нужны
преобразование типов происходит поэтому не в тему
 
Сверху