当我使用foreach循环浏览sql请求的结果时出现问题我得到了这个错误queryWarning:当我使用foreach时非法的字符串偏移量: 请有人帮助我,我已经失去了
这是我的代码:
connexion.php:
$bdd = new PDO('mysql:host=localhost;dbname=rep', '******', '******');
sendMail.php
include("connexion.php");
require 'PHPMailerAutoload.php';
$sql= $bdd->query('SELECT count(id) as id from inci where retour="0" AND
atelier="test"');
$data = $sql->fetch();
$mail = new PHPMailer;
$mail->SMTPDebug = 3;
$mail->isSMTP();
$mail->Host = '******';
$mail->SMTPAuth = true;
$mail->Username = '******';
$mail->Password = '*******';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->setFrom('******');
$mail->addAddress('******', 'name');
$mail->Subject = ' valider';
$mail->Body = "
<table>
<thead>
<tr>
<th> Destinataire |</th>
<th> Atelier |</th>
<th> Anomalie
</th>
</tr>
</thead>
";
foreach($data as $raw) {
$destinataire=$raw['destinataire'];
$atelier=$raw['atelier'];
$anomalie=$raw['anomalie'];
$mail->Body .="
<tr>
<td> ".$destinataire."</td>
<td> ".$atelier." </td>
<td> ".$anomalie." </td>
</tr>
</table>
@endforeach
";
}
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error : ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
错误:
Warning: Illegal string offset 'destinataire' in
/sendemail/sendEmail.php on line 41
Warning: Illegal string offset 'atelier' in
/home/sendemail/sendEmail.php on line 42
Warning: Illegal string offset 'anomalie' in
/home/sendemail/sendEmail.php on line 43
Warning: Illegal string offset 'destinataire' in
/home/sendemail/sendEmail.php on line 41
Warning: Illegal string offset 'atelier' in
/home/sendemail/sendEmail.php on line 42
Warning: Illegal string offset 'anomalie' in
/home/sendemail/sendEmail.php on line 43
Message has been sent
答案 0 :(得分:0)
您应该在第7行使用fetchAll()
代替fetch()
:
$data = $sql->fetchAll();
foreach ($data as $raw) {
$destinataire = $raw['destinataire'];
$atelier = $raw['atelier'];
$anomalie = $raw['anomalie'];
}
方法fetch()
仅返回结果集中的下一行。因此,另一种选择是在一段时间内使用fetch()
:
while ($raw = $sql->fetch()) {
$destinataire = $raw['destinataire'];
$atelier = $raw['atelier'];
$anomalie = $raw['anomalie'];
// rest of your code
}