Классический способ использования массива:
char int_is_4_bytes_assertion[sizeof(int) == 4 ? 1 : -1];
Это работает, потому что если утверждение истинно, массив имеет размер 1, и он действителен, но если он ложный, размер -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
Так что-то вроде этого должно работать (приведите другие столбцы как CHAR
, если они также INT
в вашей таблице):
$query_details= "SELECT *
FROM Purchases
WHERE CAST(sn AS CHAR) = '$phone'
OR sentto = '$phone'
OR batch= '$phone' ";