dqjcb132285 2013-11-01 10:28
浏览 68
已采纳

内部功能没有选择数据库,PDO的解决方案是什么?

I'm attempting to perform a query inside a function but it return me "No database selected". I regularly have re-initialized the PDO object inside it

$db = "mysql:host=localhost;dbname=my_database";
$pdo = new PDO($db, 'dbname', 'dbpassword');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//some operations.. Works fine!

function sendMail($to)
    {
      $db = "mysql:host=localhost;dbname=my_database";
      $pdo = new PDO($db, 'dbname', 'dbpassword');
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

      $qryString="SELECT Codice FROM users WHERE Mail=:mail";
      $qry = $pdo->prepare($qryString);
      $params = array("mail" => $to);
      $qry->execute($params); //won't work
    }

Note that operations on the DB outside the function works fine.

The problem is that the code won't work neither passing the global $pdo object. This is the actual code

 $db = "mysql:host=localhost;dbname=my_database";
 $pdo = new PDO($db, 'dbname', 'dbpassword');
 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 sendMail($mail, $pdo)

function sendMail($to, PDO $pdo)
        {
          $qryString="SELECT Codice FROM users WHERE Mail=:mail";
          $qry = $pdo->prepare($qryString);
          $params = array("mail" => $to);
          $qry->execute($params); 
        }
  • 写回答

2条回答 默认 最新

  • dsghpgmay31938863 2013-11-01 10:34
    关注

    Pass the PDO object to the function, because the scope of $pdo is outside the scope of sendMail().

    function sendMail(PDO $pdo, $to) {
        $queryString = "SELECT Codice FROM users WHERE Mail=:mail";
        $statement = $pdo->prepare($queryString);
        $params = array("mail" => $to);
        $result = $statement->execute($params);
    }
    

    or

    function sendMail($to) {
        global $pdo;
        $queryString = "SELECT Codice FROM users WHERE Mail=:mail";
        $statement = $pdo->prepare($queryString);
        $params = array("mail" => $to);
        $result = $statement->execute($params);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料