Когда вы сравниваете числовой столбец, MySQL преобразует вашу строку в число (поэтому он удаляет все из появления первого нецифрового символа).Это его поведение по умолчанию :
mysql> select '23andthensome' + 4;
+---------------------+
| '23andthensome' + 4 |
+---------------------+
| 27 |
+---------------------+
1 row in set, 1 warning (0.02 sec)
mysql> show warnings;
+---------+------+---------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: '23andthensome' |
+---------+------+---------------------------------------------------+
1 row in set (0.02 sec
Итак, сделайте более правильные запросы, предварительно проверьте, является ли число числом (filter_var(FILTER_VALIDATE_INT,$id);
), используйте его только тогда, когда оно есть, а затем:не отправляйте его как строку в MySQL: если вы хотите сравнить числа, отправьте число, которое не должно быть заключено в кавычки.
В качестве альтернативы, вы можете позволить MySQL выполнять работу, но это кажется пустой тратой:
mysql> select 23 = '23andthensome';
+----------------------+
| 23 = '23andthensome' |
+----------------------+
| 1 |
+----------------------+
1 row in set, 1 warning (0.00 sec)
mysql> select cast(23 as CHAR) = '23andthensome';
+-------------------------------------+
| cast(23 as CHAR) = '23andthensome' |
+-------------------------------------+
| 0 |
+-------------------------------------+
1 row in set (0.02 sec)