2017-04-10 81 views
0

当我使用foreach循环浏览sql请求的结果时,出现此错误queryWarning:当我使用foreach时出现非法字符串偏移量: 任何人都可以帮助我,迷路了警告:非法字符串偏移量php sql

这里是我的代码:

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

你应该在第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 
} 
+0

非常感谢:) – sara

相关问题