[PHP, Mysql] Problem z update rekordu w bazie danych


(rycerz2000) #1

Mam problem z update rekordu w bazie danych mysql.

$sql = call("UPDATE serwer SET update = '0' WHERE nazwa = 'serwer1'");

call to funkcja z mysql_query. Zapytanie nie działa i rekord nie zostaje zmieniony. Dane są dobrze, sprawdzałem kilka razy. Co ciekawe to samo zapytanie działa jak edytuję inny rekord w tej tabeli (tylko dane zmienione). Rekord jest typu int. Czy ktoś z Was ma jakiś pomysł co może być źle?


(dr.boczek) #2

Wklej cała obsługe bazy od początku do końca bo nie wiem w jakim celu używasz call()

 

i jeszcze jedno, nie ma tak, że nie działa, dodaj obsługę wyjątków żebyś mógł poznać kod błędu. A po drugie jeśli pole jest typu INT to po co robisz '0', wywal apostrofy bo to co w apostrofach może być traktowane jak string


(rycerz2000) #3

funkcja call

function call($sql){
    return mysql_query($sql);
}

zapytanie (z pominięciem apostrofów, dalej nie działa)

$sql = call("UPDATE serwer SET update = 0 WHERE nazwa = 'serwer1'");
  if ($sql){
    echo 'Zapytanie zostało wykonane!';
  } else echo 'Niestety nie udało się!';

(dr.boczek) #4

a dlaczego nie zostało wykonane? jaki błąd zwróciło? masz włączoną obsługę błędów w PHP? w bazie zapytanie się wykonuje prawidłowo?

 

 

generalnie widać że nie masz dużego doświadczenia z SQL i ja też nie mam, tylko na małych bazach zawsze operowałem, MSSQL i ORACLE nigdy nie potrafiłem ogarnać ale powiem ci co jest nie tak żebyś się tak nie męczył.

 

 

wyobraź sobie że ktoś każe ci zatankować samochód na stacji paliw która nazywa się "zatankuj".

 

"ZATANKUJ samochód WLEJ zatankuj JEŚLI...

 

 

widzisz błąd?

a teraz zmień swoje zapytanie tak:

UPDATE serwer SET serwer.update = 0 WHERE serwer.nazwa = 'serwer1'

lub

update serwer set serwer.update = 0 where serwer.nazwa = 'serwer1'

bo SQL nie rozróżnia wielkości znaków, piszemy wielkimi żeby łatwiej było sie odnaleźć

 

i takie zapytanie ci sie na pewno wykona. Twoj błąd polega na tym, że nazwałeś kolumnę "update" a to jest nazwa zastrzeżona. to tak jakbyś nazwał kolumnę "select" albo "delete"

 

SELECT select FROM tabela WHERE select = '0'

 

 

baza danych ma prawo zgłupieć po takim zapytaniu. dlatego musisz zmienić nazwę kolumny z "update" na jakąś inną albo odwoływać sie przez nazwę tabeli "serwer.update".


(Drobok) #5

Do takich rzeczy jest ` by potem serwer mógł zrozumieć co user od niego chce. Potem jeden z drugim olewa zapytanie po zapytaniu "bo przecież to nic nie daje" a jak jest błąd to nie rozumieją dlaczego.


(dr.boczek) #6

a to akurat racja http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

 

natomiast używanie ` nie jest wymagane, chyba że ktoś MUSI używać nazw zastrzeżonych.


(rycerz2000) #7

Wielkie dzięki teraz wszystko działa. Nie znam się bardzo na bazach mysql i sam bym raczej się nie domyślił w czym jest błąd.