2010-07-09 3 views
0

настоящее время у меня этот кодMySQL вставки побег

 
$main_cat = "Antiques-collectables"; 
$mcat = "0187-1443"; 
$sub_cat = "toys"; 


    mysql_query(" 
INSERT INTO categories 
(id, main_cat, sub_cat, mcat) 
VALUES 
('', '$main_cat', '$sub_cat', '$mcat') 
"); 

По некоторым причинам значение MCAT $ не хранятся должным образом. Когда я проверяю его в базе данных, он отображается как «1», «347» и т. Д. ... только 1 или 3 цифры. Я думаю, что «-» интерпретируется процессором sql как оператор. Есть ли способ избежать этого? Я также пробовал

 
$mcat = str_replace("-", "\-", $mcat); 

но все еще не работает.

ответ

0

Вы не указали свой тип столбца данных в своей таблице. Я думаю, что тип данных mcat является числовым.

Возможно, изменив тип данных mcat на строку, решите вашу проблему.

1

Когда вы вставляете строки в базу данных, вам необходимо использовать mysql_real_escape_string(). Это предотвращает любые непреднамеренные проблемы, а также SQL-инъекции, которые могут вызвать множество проблем для вашего сайта.

Вы также можете воспользоваться prepared statements, которые эффективно устраняют эту проблему.

0

Нет, '-' не является оператором SQL, когда он находится в одинарных кавычках (как у вас там есть).

Возможно, столбец mcat имеет неправильный тип данных. Это VARCHAR? Чтобы хранить то, что у вас есть, должно быть.

+0

или, возможно, id является автоматическим приращением и его следует опустить? –

+0

@Dan Heberden: добавление пустого значения для индекса AUTOINCREMENT работает в MySQL. Кроме того, если бы у него была эта проблема, вся его база данных была бы одной строкой (так как каждый INSERT перезаписывал предыдущий, имея одинаковые ключи). – Borealid

+0

А хороший момент - я просмотрел часть «существующих данных»: / –

Смежные вопросы