Это просто UPDATE
. Попробуйте следующее.
UPDATE tableName
SET Credit = Credit + 7
WHERE ID = 1
обратите внимание, что ID = 1
и ID = '1'
совпадают с тем, что сервер автоматически анализирует его.
Как сказал @ user694733, в случае, если между s.a
и s.b
есть заполнение, memcpy()
обращается к области памяти, к которой не может получить доступ &a
:
int a = 1;
int b;
b = *((char *)&a + sizeof(int));
Это Неопределенное поведение, и это в основном то, что происходит внутри memcpy()
.
Во многих реализациях языка, написанного для описания стандарта C, попытка написать N-байтовый объект в структуре или объединении повлияла бы на значение не более N байтов в структуре или объединении. С другой стороны, на платформе, которая поддерживает 8-битные и 32-битные хранилища, но не 16-битные хранилища, если кто-то объявил тип типа:
struct S { uint32_t x; uint16_t y;} *s;
, а затем выполнил s->y = 23;
без заботы о том, что случилось с двумя байтами после y
, было бы быстрее выполнить 32-битное сохранение в y
, слепо перезаписав два байта после него, чем выполнить пару 8-битных операций записи для обновления верхнего и нижние половины y
. Авторы Стандарта не хотели запрещать такое обращение.
Было бы полезно, если бы в стандарт было включено средство, с помощью которого реализации могли бы указывать, могут ли записи в структуру или члены объединения нарушать хранилище за их пределами, а программы, которые могут быть нарушены при таком нарушении, могут отказываться работать в реализациях, где он может произойти. Однако авторы Стандарта, вероятно, ожидали, что программисты, которые будут заинтересованы в таких деталях, будут знать, на каком оборудовании должна работать их программа, и, таким образом, будут знать, будут ли такие помехи памяти проблемой для такого оборудования. [117 ]
К сожалению, современные авторы компиляторов, по-видимому, интерпретируют свободы, которые должны были помочь реализациям необычного оборудования, как открытое приглашение проявить «креативность» даже при нацеливании на платформы, которые могут эффективно обрабатывать код без таких уступок.