Ваш запрос сформирован таким образом, что в MySQL срабатывает поведение "это-не-функция-не-ошибка": вы сравниваете ту же строку ('$ x') с числовым полем (id ) и в поле varchar (имя пользователя).
Хотя я уверен, что есть способы заставить эту работу работать в SQL, я подозреваю, что единственный правильный способ - это исправить PHP, который создает запрос. Что-то вроде
if (is_numeric($x)) $sql="SELECT * FROM users WHERE id = '$x' OR username = '$x'";
else $sql="SELECT * FROM users WHERE username = '$x'";
должно помочь.
Вот версия SQL, просто для полноты:
SELECT * FROM users WHERE id = IF('$x' REGEXP '^[0-9]+$','$x',0) OR username = '$x'
Примечание. Сформируйте OQ. Я предполагаю, что $ x уже экранирован.