Поскольку мне нравится писать наименьшее количество кода при выполнении небольших поисков в базе данных, в основном для целей тестирования / проверки, я написал для него небольшую «обертку».
Вместо следующего:
$dbh->prepare("UPDATE table SET multiple = ?, fields = ? WHERE id = ? LIMIT 1");
$dbh->execute($val1,$val2,$id);
Я могу уменьшить это до:
$db->u('table SET multiple, fields',[$val1, $val2, $id]);
Когда в строке sql нет WHERE
, он автоматически предполагает, что в качестве идентификатора следует использовать первичный столбец kay таблицы.
Но id
не всегда необходимо имя первичного ключа.Поэтому для его корректной работы я добавил следующий код в оболочку:
$PRI = $dbh->query("SHOW KEYS FROM $T WHERE Key_name = 'PRIMARY'")->fetchColumn(4);
$T
является частью оболочки и содержит имя таблицы.
$PRI
используется восновной запрос ...
Возвращает имя первичного ключа в этой таблице, поэтому я могу использовать его в запросе.
Конечно, это не может работать во всех ситуациях, в зависимости от настроек таблицы, нопо большей части это так.
Также возможно сделать это:
$db->u('table SET multiple, fields WHERE column = ?',[$val1, $val2, $id]);
Когда добавляется WHERE column = ?
(в частности, WHERE
), нет необходимости в этом дополнительномхотя запрос ... Это все о сокращении написания, и не нужно помнить каждый первичный столбец;)
Итак, есть ли способ включить запрос SHOW KEYS
в основной запрос - это будет выглядетькак это:
SELECT fields FROM table WHERE (SHOW KEYS ...) AND other = ? AND colums = ?
То есть не нужно запускать два запроса одновременно?