0

現在、コンセプトのプロトタイプを作成しているため、PHPMailer を使用して電子メールを生成/送信しています。近いうちに SendGrid のようなものに移行しますが、現時点ではそれは問題ではありません。DB 内のすべてのユーザーにメールを送信する必要がありますが、メールは DB に保存されている要素 (個々のユーザーに固有) に基づいてカスタマイズされます。

DBからフィールドを取得してメールを送信するためにPHPMailerを使用しています。ただし、すべてのユーザーを循環して各ユーザーに電子メールを生成する機能を追加しようとすると、PHP/SQL の問題が発生しているようです。

"users" テーブルにはフィールドがあります: cid、email、fname、lname。DB 内の他の情報をプルするために cid をプルする必要があり、メッセージの送信先を知るためにメールが必要です。これが私のSQL/PHPです:

require_once('/PHPMailer_v51/class.phpmailer.php');
include $_SERVER['DOCUMENT_ROOT'] . '/NG/includes/db.inc.php';

try
{
$sql = 'SELECT * FROM users';
$result = $pdo->prepare($sql);
$result->execute();
}

catch (PDOException $e)
{
$error = 'Error fetching user information.';
include 'error.html.php';
exit();
}

 foreach ($result as $row);
 {
  try
  {
    $high_result = $pdo->query('SELECT title FROM book WHERE topic = "high" and cid = $row['cid']');
  }
  catch (PDOException $e)
  {
  $error = 'Error fetching fields from database!';
  include 'error.html.php';
  exit();
  }
  .... the rest of the for statement....

$high_result 行で予期しない T_STRING エラーが発生しています。「users」DB には、cid、email、fname、lname のフィールドがあります。SQL ステートメントで配列を参照できませんか? そうでない場合、これをどのように行うべきかについてのアイデアはありますか?

ありがとう、

より糸

4

3 に答える 3

1

あなたが持っている ";" foreach 行で、それを削除すると動作するはずです

于 2012-10-08T01:31:59.463 に答える
0

クエリは

$high_result = $pdo->query('SELECT title FROM book WHERE topic = "high" and cid = $row[cid]');

あなたは'中に含めまし$row['cid']た、それは間違いでした。そして;foreachループでも間違いがそれを取り除きます。

于 2012-10-08T01:31:36.623 に答える
0
foreach ($result as $row) // The semicoln here is not required
 //... The rest of the statements

$high_result = $pdo->query("SELECT title FROM book WHERE topic = "high" and cid = '. $pdo->quote($row[cid]));

フィールドが文字列の場合の引用符。

于 2012-10-08T01:43:41.777 に答える