0

関数内でクエリを実行しようとしていますが、「データベースが選択されていません」というメッセージが返されます。その中のPDOオブジェクトを定期的に再初期化しました

$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
    }

関数外の DB に対する操作は正常に機能することに注意してください。

問題は、コードが機能せず、グローバル $pdo オブジェクトを渡さないことです。これが実際のコードです

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

2 に答える 2

0

$pdoのスコープが のスコープ外であるため、PDO オブジェクトを関数に渡します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);
}

また

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);
}
于 2013-11-01T10:34:25.293 に答える