1

ユーザー管理システムクラスを作成しようとしています。私の機能の1つは、データベースの列に値があるかどうかを確認することです。何も返しません。

関連情報は次のとおりです。

require("opperators/connect.php");
class UserManagemen
{
protected $db;

public function __construct(PDO $db)
  {
    $this->db = $db;
  }
public function isInDatabase($checkIfThis, $isHere)
  {
    $stmt = $db->prepare("SELECT 1 from users WHERE $isHere = :$isHere");
    $stmt->execute(array(':$isHere' => $checkIfThis));
        if ($stmt->rowCount() > 0) {
        echo "It's in the database";
        } else {
        echo "Not in the database and you are good to go!";
        }
   }
}
$usermanagement = new UserManagemen($db, null, null, null);
$usermanagement->isInDatabase(Batman, username);

connect.phpで:これは私の手続き型コーディングテストで機能しました。

$configurator['database'] = array(
'username' =>   'root',
'password' =>   'root',
'host' =>    'localhost',
'db' =>    'girlscouts',
);
$options  = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);
try {
$db = new PDO("mysql:host={$configurator['database']['host']};dbname={$configurator['database']['db']};charset=utf8", $configurator['database']['username'], $configurator['database']['password'], $options);
}
catch (PDOException $ex) { 
die("Failed to connect to the database: " . $ex->getMessage());
}

これが繰り返し尋ねられた場合は、事前にお詫び申し上げます。グーグルを試しましたが、何をグーグルするかわからないためか、何の価値もありませんでした。私は助けを求めるのは大したことではありませんが、それを試してみます。

4

2 に答える 2

0

あなたはそれを誤解している。

確認のためだけに追加のリクエストを行う代わりに、そのような値がすでにテーブルに格納されている場合はUNIQUE、列に制約を設定する必要があります。次に、PDOインスタンスを正しく設定している場合、複製を挿入しようとすると、が発生しPDOExceptionます。これにより、任意の方法で処理できます。

また、このUNIQUE制約により、MySQLで.. ON DUPLICATE UPDATE .. 構築を実行できます。

PDOの使用について詳しくは、このチュートリアルをお読みください。プリペアドステートメントをエミュレートしているようです。

于 2012-10-24T00:01:12.950 に答える
0

私はそれがすべきだと思います

if ($stmt->rowCount() > 0) { // data available
    echo "It's in the database";
} else {
    echo "Not in the database and you are good to go!";
}

それ以外の

if ($stmt->rowCount() > 0) {
    echo "Not in the database and you are good to go!";
} else {
    echo "It's in the database";
}

PDOまた、あなたはそのようなものを初期化しませんでしたnew PDO(...);、あなたのコンストラクターではそれはそうあるべきです

$this->db = new PDO(...);

そしてあなたはそれを次のように使うべきです

$stmt=$this->db->prepare(...);
$stmt->execute(...);

詳細については、これこれを見てください。

于 2012-10-23T17:30:48.280 に答える