以下は、提案されたユーザー名を受け取り、使用されていない場合はユーザー名を返し、使用されている場合は最小の整数が追加されたユーザー名を返します。それはうまく機能しますが、私はそれが単一の方法で同じようにできるかどうか疑問に思わずにはいられません。私が困惑しているのは、WHILEステートメントが条件付きとの両方を必要$stmt->execute(...)
とreturn $stmt->fetchColumn()
することです。匿名関数は機能すると思いますが、これによって準備されたステートメントを各呼び出しに使用できるとは思われません。DOループは機能するかもしれないと思っていますが、経験があまりなく、http: //www.php.net/manual/en/control-structures.do.while.phpを読むと、「gotoを使用する必要があります。このハックの代わりにオペレーター。」これを行うための推奨される方法を提供してください。ありがとう
<?php
class myClass
{
public function createUsername($name)
{
$i='';
while($this->openUsername($name.$i)==FALSE){$i=$i+1;}
return $name.$i;
}
private function openUsername($name)
{
$sql='SELECT id FROM users WHERE username=?';
try
{
$stmt = db::db()->prepare($sql);
$stmt->execute(array($name));
return $stmt->fetchColumn()?FALSE:TRUE;
}
catch(PDOException $e){die(library::sql_error($e,$sql));}
}
}
?>