Działało ok bez argumentu title, czyli samo wywołanie funkcji i dodanie przykładowej tabeli, więc podejrzewam, że gdzieś w zły sposób przekazuję argument. Możliwe tez, że to jakas inna pierdółka typu średnik, ale nie widzę tu takich braków.
Ja bym powiedział, że brakuje ciapków dookoła title (to o czym piał @dzek69). Nie jestem pewien, ale otrzymujesz coś takiego:
UPDATE hc_video_videos SET views=views+1 WHERE title=Star Wars
A to nie jest poprawne. Jeżeli już chcesz to robić w ten sposób to:
$query="UPDATE hc_video_videos SET views=views+1 WHERE title=' " . $title . " ' ";
Możliwe, że jest inny powód, ale to już wewnątrz tej twojej funkcji, której nie pokazałeś.
Ale wiedz, że jeżeli robisz to w ten sposób, to mogę sobie zrobić tak:
twojastrona.pl/views.php?title=NOW(); DROP database xxx;
I nie masz bazy. Poczytaj o SQL Injection oraz XSS.
W skrócie, żeby dać Ci ogólne pojęcie to:
SQL Injection - jeżeli tworzysz zapytanie sklejając w ten sposób stringa, to mogę sobie postawić średnik i jechać dalej ze swoim zapytaniem. Później Ty wykonasz swoje zapytanie + moje. Jeżeli chcemy tego uniknąć to dobrze jest użyć PDO i bindowania parametrów. Daje nam to prawie 100% skuteczność (bo niestety to też można obejść w szczególnych przypadkach).
XSS - Jeżeli zapisujesz do bazy cokolwiek, co później wyświetlasz na stronie i nie zamieniasz escape'ujesz html'a to mogę sobie zrobić np. tak:
// Założmy, że jest to jakiś post czy coś tam, co później wyświetlasz i każdy to widzi:
POST: bla bla bla... <script>alert("XSS");</script>
Teraz każdy u kogo się ten post zaczyta w przeglądarce zobaczy alert XSS. Możesz w ten sposób ukraść ciasteczko i podpiąć się np. pod sesję admina i zalogować się na jego konto.