Поскольку мне нравится писать наименьшее количество кода при выполнении небольших поисков в базе данных, в основном для целей тестирования / проверки, я написал для него небольшую «обертку».
Вместо следующего:
$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]);
Когда нет WHERE
в строке sql автоматически предполагается, что в качестве идентификатора следует использовать основной столбец 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 = ?
Так что не нужно было бы запускать два запроса одновременно?
Задача ещё не решена.
Других решений пока нет …