У меня есть следующие данные:
stockcode (CHAR) | description (VARCHAR)
----------------------------------------------
1234 | some product
01234 | some other product
Я запускаю следующий код:
$sql = "SELECT * FROM stock WHERE stockcode = " . $db->quoteSmart($stockcode)
$res = $db->query($sql);
Если я передаю код акции "01234", я получаю вторую строку, как и ожидалось. Если я передаю «1234», я получаю обе строки, когда ожидаю получить только первую.
Повторяя операторы sql, это происходит потому, что только биржевой код 01234 получает кавычки вокруг него, а 1234 - нет (предположительно quoteSmart считает, что это целое число, которое не нужно заключать в кавычки?).
Затем Mysql сравнивает int 1234 со столбцом CHAR и решает, что они совпадают (предположительно, выполняется сравнение в виде целых чисел?)
В коде много мест, где создаются запросы, подобные этому, и в 99% случаев переменная stockcode будет буквенно-цифровой, лишь изредка полностью числовой и очень редко содержит начальный ноль, это всего лишь случайность, с которой я столкнулся сегодня.
Кто-нибудь может порекомендовать простое решение?