2 mysql queries in PDO?


2 mysql queries in PDO?

我正在尝试学习PDO,但我还没有在任何其他网站上遇到这个,

我有两个查询…

        $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);

您的示例代码有点令人困惑,因为您只是覆盖$query并且只运行单个查询。

我认为你使用PDO准备语句的方法在很大程度上是正确的,但是我要指出的是,如果你需要同时使用它们,你可以考虑为语句对象使用不同的变量名。

看下面的代码:

<?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. 你运行execute,传递array("var_name" => $var_value)给它。

这个适合我:

$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块中包围它