2015-08-18 11 views
0

Я назначаю 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; 
?> 
+0

Имея 'UUID', как первичный ключ является плохим выбором. Это здорово, когда вы распределяете базу данных, но наличие нецелого ключа создаст вам проблемы только из-за того, как работают MySQL и InnoDB. Самым разумным выбором было бы иметь два поля - 'id' как auto_increment и' uu_id' (или что-то), которые могут быть 'UUID()'. Затем становится тривиально извлекать 'UUID()' - просто выберите с помощью 'lastInsertId()', который дает вам значение последнего 'auto_increment'. –

+0

Хорошо, скажем, я это делаю. Я добавляю еще один столбец '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

+0

Тогда ваш код нужно после '$ stmt-> execute()' is '$ uuid = $ conn-> query (" SELECT uu_id FROM MyGuests WHERE id = ". $ Conn-> lastInsertId()) -> fetchColumn() ; '. Вы можете сделать сниппет с подготовленным оператором, если хотите, я выбрал 'query' для краткости. –

ответ

0

Вы не можете.

Ваш единственный выбор - это разделение на два запроса.

  • SELECT UUID()
  • Retrieve создал UUID в переменную PHP ($uuid)
  • Вставьте эту переменную в вашем заявлении.

    $stmt = $conn->prepare("INSERT INTO MyGuests (id,firstname, lastname, email) 
    VALUES (:uuid,:firstname, :lastname, :email)"); 
    $stmt->bindParam(':uuid', $uuid); 
    $stmt->bindParam(':firstname', $firstname); 
    $stmt->bindParam(':lastname', $lastname); 
    $stmt->bindParam(':email', $email); 
    
+0

Не могли бы вы уточнить, пожалуйста. Я внес изменения, которые вы написали в коде, но все еще не работает. Как выбрать UUID()? Я знаю, что я noob ... – N00brainer

+0

Извините, вы не можете ожидать, что люди здесь напишут весь код для вас. Мой ответ был достаточно ясным, как есть. – ciruvan

Смежные вопросы