This isn't a strictly PDO-based solution, but you could try something like this:
// grab list of all cart_id ids
$qry = 'SELECT cart_id FROM assigned_carts'
.' WHERE cart_id >= 100000000 && cart_id <= 9999999999';
$all_cart_ids = $dbh->exec($qry);
// generate a random number that's not in that list
while($cart_id === NULL || in_array($cart_id, $all_cart_ids)){
$cart_id=mt_rand(100000000,9999999999);
}
// insert
$stmt=$dbh->prepare("INSERT INTO assigned_carts (cart_id,ip,date) VALUES (:cart_id,:ip,now())");
$stmt->bindValue(':ip',$ip, PDO::PARAM_STR);
$stmt->bindValue(':cart_id',$cart_id, PDO::PARAM_INT);
try {
$stmt->execute();
return $cart_id;
}
catch(PDOException $e){
// do something
return -1;
}