Покажи всички категории

Насоки в помощ за правилна работа с MySQL


Оценка 4 от максимум 5. Общо гласували: 27.

добавен:
2010-11-30 09:21:39
прегледи:
7311
автор:
Стоян

Здравейте.

Все повече от начинаещите задаващи въпроси във форума, които твърдят че са гледали определен урок и са го научили доказват с въпросите си обратното.

По-голямата част от кода който се показва като не работещ, са продиктувани от два типа грешки:

 

1. Необмислено и сляпо преписване на код, без оглед на осъзнаването му от преписващият.

2. Не познаване на същността на синтаксиса на MySQL и логическата последователност от заявки и препинателни знаци.

Понеже в основите на писане на код в езика РНР има една съществена трудност и тя е, директното писане на SQL заявки в скриптовете, тъй като начинаещите не използват никакво ниво на абстракция към база данни или помощни класове или библиотеки. То за да се пише добре код трябва да се познават и двата езика, понеже в крайна сметка един скрипт е смесица от тези два езика, които са крайно различни.

Все пак има решение което може да помогне на хората не познаващи добре езикът за заявки към базата данни в случаят - MySQL. Решението се казва, phpmyadmin!

Това е инструмент който се ползва много често и то не само от млади програмисти, а и от много РНР гурута.

В този урок няма да се спуснем в подробности в работата с него, а просто ще наблегнем на това как той може да ни помогне за по удобна и бърза работа, както и дебъгване на грешки.

Нека дам един пример за грешка в заявката към база данни от един потребител:

mysql_query('INSERT INTO group_cat (name,date_added,"desc")
VALUES("'..'",'.time().',"'..'")');

Заявката определено няма да мине! При съвета ми да пусне кода си през „конзолата“ за заявки на phpmyadmin, той е пуснал директно и разбира се тя пак не е минала. Защо?

Вече споменах че един скрипт в рнр с заявка към база данни е смес от двата езика и в случая няма как това да е легитимна заявка щом има рнр код в нея.

За не знаещите ето къде се тестват заявки в phpmyadmin:

 

 

 

Какво можем да направим в случая с тази заявка при положение, че сме сигурни в правилността на данните подадени от рнр?!

Просто е да почистим заявката от данните и да я направим коректна (а дали е коректна) SQL заявка:

Първо изтриваме всичко което се намира в тези скоби: VALUES("'..'",'.time().',"'..'")

То не е реална заявка а рнр код.

Преди да направим промените обаче трябва да се убедим какви типове данни носят полетата в таблицата (таблицата ми е тестова и може да не е реалния тип зададен за грешка от форума)

Това става от тук:

 

 

Значи данните трябва да отговарят на тези изисквания за да са валидни:

name – низ далак 23 символа.

data_added – целочислен тип с определена дължина (това не е вярно в случая за датата)

desc - низ далак 23 символа.

Променяме заявката ето така:

INSERT INTO group_cat (name,date_added,"desc")
VALUES ('име', '1234', 'нещо си');

Обаче заявката пак не минава и избълва нещо от сорта:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"desc") VALUES (............................)

Става ясно че така написана заявката има правилно подадени данни, но неправилна заявка, тоет проблема е тук:

INSERT INTO group_cat (name,date_added,"desc")

Грешката е очевадна обаче нека покажем какво би трябвало да направи един не добре запознат с SQL потребител.

PhpMyadmin ни дава едно преимущество при създаването на заявки и използването им в наш собствен рнр код и това и възможността да внасяме данни без да пишем реално SQL заявки.

 

 

Попълваме полетата по определения начин и продължаваме. Ето резултата – получаваме чиста SQL заявка:

 

 

 

Добрите неща не свършват до тук. Има опция в която тази заявка може спокойно да я превърнем в рнр заявка (синичкото в дясно на снимката).

И имаме този изход:

 

 

 

Вече може да поправим нашата заявка!

 

 

Бележка от автора.

Забележете че името на базата данни дадена от първия пример както и тъпът данни не съвпадат с моя тест. Понеже аз не зная структурата на базата на питащия се опитвам да я налучкам. Това все пак не пречи на показаните примери да са валидни и за хората умеещи да четат и вникват в прочетеното няма да е проблем да разберат и осмислят разликите на практика.

С уважение:

Стоян Германов