SELECT
クエリを実行するためのPHP.netの指示に従ってみましたが、これを実行する最善の方法はわかりません。
パラメータ化されたSELECT
クエリを使用して、可能であれば、ID
フィールドがパラメータに一致するテーブルでname
を返したいと思います。これは一意であるため、1つのID
を返す必要があります。
次に、そのID
を別のテーブルのINSERT
に使用したいので、成功したかどうかを判断する必要があります。
また、再利用のためにクエリを準備できることを読みましたが、これがどのように役立つかはわかりませんでした。
次のようなデータを選択します。
$db = new PDO("...");
$statement = $db->prepare("select id from some_table where name = :name");
$statement->execute(array(':name' => "Jimbo"));
$row = $statement->fetch(); // Use fetchAll() if you want all results, or just iterate over the statement, since it implements Iterator
同じ方法で挿入します。
$statement = $db->prepare("insert into some_other_table (some_id) values (:some_id)");
$statement->execute(array(':some_id' => $row['id']));
エラー時に例外をスローするようにPDOを構成することをお勧めします。クエリのいずれかが失敗した場合、PDOException
を取得します-明示的に確認する必要はありません。例外をオンにするには、$db
オブジェクトを作成した直後にこれを呼び出します:
$db = new PDO("...");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
私は最近PDOで作業しており、上記の答えは完全に正しいですが、次のように動作することを文書化したかっただけです。
$nametosearch = "Tobias";
$conn = new PDO("server", "username", "password");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sth = $conn->prepare("SELECT `id` from `tablename` WHERE `name` = :name");
$sth->bindParam(':name', $nametosearch);
// Or sth->bindParam(':name', $_POST['namefromform']); depending on application
$sth->execute();
bindParam
またはbindValue
メソッドを使用して、ステートメントの準備に役立てることができます。特に、複数の値/変数をバインドしている場合は、$check->execute(array(':name' => $name));
を実行する代わりに、一目でより明確になります。
以下の明確で読みやすい例を確認してください。
$q = $db->prepare("SELECT id FROM table WHERE forename = :forename and surname = :surname LIMIT 1");
$q->bindValue(':forename', 'Joe');
$q->bindValue(':surname', 'Bloggs');
$q->execute();
if ($q->rowCount() > 0){
$check = $q->fetch(PDO::FETCH_ASSOC);
$row_id = $check['id'];
// do something
}
複数行が必要な場合は、LIMIT 1
を削除し、フェッチメソッドをfetchAll
に変更します。
$q = $db->prepare("SELECT id FROM table WHERE forename = :forename and surname = :surname");// removed limit 1
$q->bindValue(':forename', 'Joe');
$q->bindValue(':surname', 'Bloggs');
$q->execute();
if ($q->rowCount() > 0){
$check = $q->fetchAll(PDO::FETCH_ASSOC);
//$check will now hold an array of returned rows.
//let's say we need the second result, i.e. index of 1
$row_id = $check[1]['id'];
// do something
}
少しだけ完全な答えがここにあります。
$sql = "SELECT `username` FROM `users` WHERE `id` = :id";
$q = $dbh->prepare($sql);
$q->execute(array(':id' => "4"));
$done= $q->fetch();
echo $done[0];
ここで$dbh
はPDO dbコネクタであり、id
に基づいてテーブルusers
に基づいてfetch();
を使用してusername
を取得します
これが誰かのお役に立てば幸いです!
方法1:PDOクエリメソッドを使用する
$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"');
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
行カウントの取得
$stmt = $db->query('SELECT id FROM Employee where name ="'.$name.'"');
$row_count = $stmt->rowCount();
echo $row_count.' rows selected';
方法2:パラメータ付きステートメント
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=?");
$stmt->execute(array($name));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
方法3:パラメーターをバインドする
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=?");
$stmt->bindValue(1, $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
**bind with named parameters**
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=:name");
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
or
$stmt = $db->prepare("SELECT id FROM Employee WHERE name=:name");
$stmt->execute(array(':name' => $name));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
これをもっと詳しく知りたい link