0

私は PDO を学ぼうとしていますが、他のサイトではまだこれに出くわしていません。

2つの質問があります...

        $query = mysql_query("INSERT INTO `users` (oauth_provider, oauth_uid, username,email,twitter_oauth_token,twitter_oauth_token_secret) VALUES ('$oauth_provider', $uid, '$username','$email','','')") or die(mysql_error()); 
        $query = mysql_query("SELECT * FROM `users` WHERE oauth_uid = '$uid' and oauth_provider = '$oauth_provider'");
        $result = mysql_fetch_array($query);
        return $result;

これは、準備されたステートメントとしてどのように記述されますか?

 $query1 = "INSERT QUERY";
    $stmt1  = $DBH->prepare($query1);

$query2 = "SELECT QUERY";
    $stmt2  = $DBH->prepare($query2);
4

3 に答える 3

0

このコードを見てください:

<?php
try {
      $username = 'user';
      $password = '';
      $conn = new PDO('mysql:host=localhost;dbname=test', $username, $password);
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

      //1-st request - simplified
      $stmt = $conn->prepare('INSERT INTO `users` (oauth_provider) 
          VALUES (:oauth_provider)');
      $stmt->execute(array("oauth_provider" => $oauth_provider));

      //2-nd request
      $stmt = $conn->prepare('SELECT * FROM `users` 
          WHERE oauth_uid =:uid AND oauth_provider = :oauth_provider');
      $stmt->execute(array("uid" => $uid, "oauth_provider" => $oauth_provider));
      while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            var_dump($row);
      }

} catch(PDOException $e) {
      echo 'ERROR: ' . $e->getMessage();
}
?>

準備済みステートメントの使用方法は明らかだと思います。

  1. パラメータごと$conn->prepareにSQLリクエストを実行して配置します。:var_name
  2. array("var_name" => $var_value) を渡して execute を実行します。
于 2013-05-22T18:18:45.587 に答える
0

これは私のために働く:

$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $dbh->prepare("INSERT INTO table1");
$stmt2 = $dbh->prepare("SELECT FROM table2");

$stmt->execute();
$stmt2->execute();

これはきれいな解決策ではありませんが、私にとってはうまくいくので、「エレガントな」解決策が見つかるまで使用します。

必ず try catch ブロックで囲んでください。

于 2013-05-22T18:46:18.857 に答える
0

単純に上書き$queryして単一のクエリのみを実行しているため、サンプルコードは少し混乱しています。

PDOプリペアドステートメントを使用するアプローチはおおむね正しいと思いますが、両方を同時に操作する必要がある場合は、ステートメントオブジェクトに異なる変数名を使用することを検討してください。

于 2013-05-22T18:09:35.540 に答える