85

PHP.netの指示に従ってSELECTクエリを実行しようとしましたが、これを実行するための最善の方法がわかりません。

SELECT可能であれば、パラメータ化されたクエリを使用して、フィールドがパラメータと一致IDするテーブルでを返したいと思います。一意になるため、nameこれは1つを返す必要があります。ID

ID次に、それを別のテーブルに使用したいINSERTので、成功したかどうかを判断する必要があります。

また、クエリを再利用できるように準備できることも読みましたが、これがどのように役立つかはわかりませんでした。

4

6 に答える 6

158

You select data like this:

$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

You insert in the same way:

$statement = $db->prepare("insert into some_other_table (some_id) values (:some_id)");
$statement->execute(array(':some_id' => $row['id']));

I recommend that you configure PDO to throw exceptions upon error. You would then get a PDOException if any of the queries fail - No need to check explicitly. To turn on exceptions, call this just after you've created the $db object:

$db = new PDO("...");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
于 2009-04-20T09:15:45.123 に答える
16

私は最近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();
于 2013-03-02T20:11:41.393 に答える
12

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
}
于 2014-03-04T08:26:23.600 に答える
6

少し完全な答えがここにあり、すべてを使用する準備ができています:

    $sql = "SELECT `username` FROM `users` WHERE `id` = :id";
    $q = $dbh->prepare($sql);
    $q->execute(array(':id' => "4"));
    $done= $q->fetch();

 echo $done[0];

ここに PDO db コネクタがあり、テーブルからの使用$dbhに基づいて取得しましたidusersusernamefetch();

これが誰かの助けになることを願っています。

于 2013-10-19T15:23:13.077 に答える
3

方法 1:USE 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);

詳しく知りたい方はこちらのリンクをご覧ください

于 2016-01-08T07:00:48.430 に答える
-2

単一ページでインライン コーディングを使用していて、この完全な例よりも oops を使用していない場合は、確実に役立ちます。

//connect to the db
$dbh = new PDO('mysql:host=localhost;dbname=mydb', dbuser, dbpw); 

//build the query
$query="SELECT field1, field2
FROM ubertable
WHERE field1 > 6969";

//execute the query
$data = $dbh->query($query);
//convert result resource to array
$result = $data->fetchAll(PDO::FETCH_ASSOC);

//view the entire array (for testing)
print_r($result);

//display array elements
foreach($result as $output) {
echo output[field1] . " " . output[field1] . "<br />";
}
于 2016-11-14T10:23:52.070 に答える