Если таблицы cols и значения являются переменными, то существует два способа:
С двойными кавычками ""
полный запрос:
$query = "INSERT INTO $table_name (id, $col1, $col2)
VALUES (NULL, '$val1', '$val2')";
Или
$query = "INSERT INTO ".$table_name." (id, ".$col1.", ".$col2.")
VALUES (NULL, '".$val1."', '".$val2."')";
С одинарными кавычками ''
:
$query = 'INSERT INTO '.$table_name.' (id, '.$col1.', '.$col2.')
VALUES (NULL, '.$val1.', '.$val2.')';
Использовать обратные тики ``
, когда имя столбца / значения похоже на зарезервированное ключевое слово MySQL.
Примечание: Если вы указываете имя столбца с именем таблицы, используйте обратные тики следующим образом:
`table_name`
. `column_name`
& lt; - Примечание: исключить .
из обратных тиков.
Здесь все о питонах Питона, которые я смог собрать (возможно, больше, чем кто-либо хотел бы знать, но ответ исчерпывающий).
dict
использует открытую адресацию для разрешения хеш-коллизий (поясняется ниже) (см. dictobject.c: 296-297 ). O(1)
по индексу). 0, 1, ..., i, ...
слева находятся индексы слотов в хеш-таблице (они просто для иллюстративных целей и не хранятся вместе с таблицей, очевидно!). # Logical model of Python Hash table
-+-----------------+
0| <hash|key|value>|
-+-----------------+
1| ... |
-+-----------------+
.| ... |
-+-----------------+
i| ... |
-+-----------------+
.| ... |
-+-----------------+
n| ... |
-+-----------------+
i
, который основан на хэше ключа. CPython изначально использует i = hash(key) & mask
(где mask = PyDictMINSIZE - 1
, но это не очень важно). Просто обратите внимание, что начальный слот i
, который проверяется, зависит от хеша ключа . <hash|key|value>
). Но что, если этот слот занят !? Скорее всего, потому, что другая запись имеет один и тот же хеш (хеш-коллизия!) [/ G20] ==
сравнение не is
) записи в слоте против хэша и клавиши текущей записи, которую нужно вставить ( dictobject.c: 337,344-345 ) соответственно. Если совпадают , тогда он считает, что запись уже существует, отбрасывается и переходит к следующей записи, которую нужно вставить. Если хэш или ключ не совпадают, он начинает зондирование. i+1, i+2, ...
и использовать первый доступный (это линейное исследование). Но по причинам, прекрасно объясненным в комментариях (см. dictobject.c: 33-126 ), CPython использует случайное зондирование. При случайном зондировании следующий слот выбирается в псевдослучайном порядке. Запись добавляется в первый пустой слот. Для этого обсуждения фактический алгоритм, используемый для выбора следующего слота, не очень важен (см. dictobject.c: 33-126 для алгоритма для зондирования). Важно то, что слоты исследуются до тех пор, пока не будет найден первый пустой слот. dict
будет изменен, если он будет заполнен на две трети. Это позволяет избежать замедления поиска. (см. dictobject.h: 64-65 ) ПРИМЕЧАНИЕ. Я провел исследование реализации Python Dict в ответ на мой собственный вопрос о том, как несколько записей в dict могут иметь одинаковые значения хэширования. Я опубликовал немного отредактированную версию ответа здесь, потому что все исследования очень актуальны и для этого вопроса.
Словари Python используют Открытая адресация ( ссылка внутри Beautiful code )
NB! Открытая адресация , иначе закрытое хэширование должно, как отмечено в Википедии, не путать с ее противоположным открытым хешированием!
Открытая адресация означает, что dict использует слоты массива, а когда первичная позиция объекта берется в dict, то место объекта запрашивается у другого индекса в том же массиве, используя схему «возмущения», где часть хеш-значения объекта играет роль .