Mysql поиск не поиск по всей строке

Классический способ использования массива:

char int_is_4_bytes_assertion[sizeof(int) == 4 ? 1 : -1];

Это работает, потому что если утверждение истинно, массив имеет размер 1, и он действителен, но если он ложный, размер -1 дает ошибка компиляции.

Большинство компиляторов покажет имя переменной и укажет на правую часть кода, где вы можете оставить возможные комментарии об утверждении.

0
задан Naira 4Dollar 18 March 2019 в 22:41
поделиться

1 ответ

Если ваш столбец определен как INT, то MySQL также попытается преобразовать строку сравнения в целое число. Поскольку он начинается с числа, MySQL извлечет все начальные цифры из строки (в данном случае 19), преобразует ее в INT и затем выполняет сравнение. Следовательно, вы получите строки с возвращенным sn = 19. Например:

SELECT 19 = '19c5bx'

Вывести

1 -- true

Чтобы обойти это, CAST любые целочисленные столбцы как CHAR перед сравнением, например

SELECT CAST(19 AS CHAR) = '19c5bx'

Выходные данные

0 -- false

Это все равно будет работать нормально, если вы хотите сравнить с целым числом вместо строки, например,

SELECT CAST(19 AS CHAR) = 19

Вывод

1

Демонстрация по dbfiddle

Так что-то вроде этого должно работать (приведите другие столбцы как CHAR, если они также INT в вашей таблице):

$query_details= "SELECT * 
                 FROM Purchases 
                 WHERE CAST(sn AS CHAR) = '$phone' 
                    OR sentto = '$phone' 
                    OR batch= '$phone' ";
0
ответ дан Nick 18 March 2019 в 22:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: