diff --git a/lib/classes/SimpleORMap.php b/lib/classes/SimpleORMap.php index 7492906519b65f0fc976a7dfac6dc01f6aec7086..b280d2a2e67ecfba3dfbc1f6b0359a0e54355092 100644 --- a/lib/classes/SimpleORMap.php +++ b/lib/classes/SimpleORMap.php @@ -1267,20 +1267,29 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate } /** - * create new unique pk as md5 hash - * if pk consists of multiple columns, false is returned - * @return boolean|string + * Create new unique pk as md5 hash + * + * This will only work for said md5 hashes columns. An exception is thrown + * otherwise. + * + * @return string */ - function getNewId() + public function getNewId() { - $id = false; - if (count($this->pk()) == 1) { - do { - $id = md5(uniqid($this->db_table(), 1)); - $db = DBManager::get()->query("SELECT `{$this->pk()[0]}` FROM `{$this->db_table()}` " - . "WHERE `{$this->pk()[0]}` = '$id'"); - } while($db->fetch()); + if ($this->hasAutoIncrementColumn()) { + throw new Exception('You cannot retrieve the new id for an autoincrement column'); } + + if (count($this->pk()) !== 1) { + throw new Exception('You cannot retrieve a new id for a composite primary key'); + } + + do { + $id = md5(uniqid($this->db_table(), true)); + $db = DBManager::get()->query("SELECT `{$this->pk()[0]}` FROM `{$this->db_table()}` " + . "WHERE `{$this->pk()[0]}` = '$id'"); + } while ($db->fetch()); + return $id; }