Вероятно, потому, что вы завершаете запрос в двойных кавычках, но переменная находится в одинарных кавычках, поэтому она обрабатывается как литерал, а если столбец int, вы получите вместо 0.
Попробуйте это:
$sql_query = "INSERT INTO users_info (steam64) VALUES ('" . $steam64 . "')";
Кроме того, перед тем, как я начну плакать, обязательно прочитайте SQL-инъекцию в случае, если вы не дезинфицируете переменные, отправляемые непосредственно в SQL-заявления.
- Обновление -
Исходя из вашего комментария «сбрасываемого значения»; число, которое вы пытаетесь вставить, слишком велико для 32-битных систем. Максимальный размер для 32-бит составляет 4 294 967 295, а максимальный для 64-бит - 18 446 744 073 709 551 615. Я бы рекомендовал преобразовать ваш столбец в хеш varchar(100)
, а не в int, или переключиться на 64-битную систему. Большая статья о max ints здесь и здесь .
Почему бы не сделать:
void f<T>(T o1, T o2) {
if (o1.GetType() != o2.GetType()) return;
// can I assert that t is not null ??
}
Для того, что я понимаю, вы хотите, проверив if (o1.GetType() != o2.GetType()) return;
, чтобы убедиться, что o2
имеет тип T
, а не производный тип. Так что o2
должно быть типа T
, и у вас нет проблем с приведением типов.
Почему бы просто не использовать оператор is
, 1 sup>, хотя «возможно», немного медленнее
if (o2 is SomeType result) o1 = result;
или в качестве метода
private void SomeThingWeird<T>(ref T o1, object o2)
{
if (o2 is T result)
o1 = result;
}
Список литературы
1 sup> Детализация в микробенчмарках .NET Runtime: оптимизации typeof .
Да, вы можете, но я бы предложил сделать еще один шаг и сделать следующее:
void f<T, U>(T t, U u) where T : class
{
if (!t.GetType().IsAssignableFrom(u.GetType())) return;
T ut = u as T;
// can I assert that t is not null ?? Yes, you can
}
IsAssignableFrom
следует прибить его для любого типа.