Я назначаю uuid()
в поле id
. Он работает отлично. Но я не знаю, как echo
сгенерированный uuid
назад к пользователю. Как я могу это сделать?Извлечение uuid из запроса mysql
Мой код:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// prepare sql and bind parameters
$stmt = $conn->prepare("INSERT INTO MyGuests (id,firstname, lastname, email)
VALUES (UUID(),:firstname, :lastname, :email)");
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);
// insert a row
$firstname = "John";
$lastname = "Doe";
$email = "[email protected]";
$stmt->execute();
echo "New records created successfully";
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
Имея 'UUID', как первичный ключ является плохим выбором. Это здорово, когда вы распределяете базу данных, но наличие нецелого ключа создаст вам проблемы только из-за того, как работают MySQL и InnoDB. Самым разумным выбором было бы иметь два поля - 'id' как auto_increment и' uu_id' (или что-то), которые могут быть 'UUID()'. Затем становится тривиально извлекать 'UUID()' - просто выберите с помощью 'lastInsertId()', который дает вам значение последнего 'auto_increment'. –
Хорошо, скажем, я это делаю. Я добавляю еще один столбец 'uu_id', и я даю ему значение' UUID() '. И оставляем' id' как 'auto increment'. '$ stmt = $ conn-> prepare (" INSERT INTO MyGuests (uu_id, firstname, lastname, email) VALUES (UUID() ,: firstname,: lastname,: email) "); $ stmt-> bindParam (': uu_id', $ uuid); $ stmt-> bindParam (': firstname', $ firstname); $ stmt-> bindParam (': lastname', $ lastname); $ stmt-> bindParam (': email', $ email); ' Но когда я вызываю' lastInsertId() ', он будет давать только auto incremented id, а не uu_id, правильно? – N00brainer
Тогда ваш код нужно после '$ stmt-> execute()' is '$ uuid = $ conn-> query (" SELECT uu_id FROM MyGuests WHERE id = ". $ Conn-> lastInsertId()) -> fetchColumn() ; '. Вы можете сделать сниппет с подготовленным оператором, если хотите, я выбрал 'query' для краткости. –