首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2 PDO中的mysql查询?

问2 PDO中的mysql查询?
EN

Stack Overflow用户
提问于 2013-05-23 02:06:14
回答 3查看 92关注 0票数 0

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

我有两个问题...

代码语言:javascript
复制
        $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;

这是如何写成准备好的语句的呢?

代码语言:javascript
复制
 $query1 = "INSERT QUERY";
    $stmt1  = $DBH->prepare($query1);

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

回答 3

Stack Overflow用户

发布于 2013-05-23 02:09:36

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

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

票数 0
EN

Stack Overflow用户

发布于 2013-05-23 02:18:46

看看这段代码:

代码语言:javascript
复制
<?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,将数组(“var_name”=> $var_value)传递给它。
票数 0
EN

Stack Overflow用户

发布于 2013-05-23 02:46:19

这对我来说很有效:

代码语言:javascript
复制
$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块中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16698731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档