Php “随机”;“非法抵销”;错误

Php “随机”;“非法抵销”;错误,php,mysql,email,loops,while-loop,Php,Mysql,Email,Loops,While Loop,每次while()循环时,以下代码都会产生非法偏移错误: 警告:第48行/Applications/MAMP/htdocs/admin/scripts/email\u owners\u send.php中的非法字符串偏移量“username” 我试图将$name设置为$email['username']如果$email['username']不是空的,如果是空的,$name应该设置为$email$email由while()语句从mysql\u fetch\u assoc()设置。这是我目前的代码

每次
while()
循环时,以下代码都会产生非法偏移错误:

警告:第48行/Applications/MAMP/htdocs/admin/scripts/email\u owners\u send.php中的非法字符串偏移量“username”

我试图将
$name
设置为
$email['username']
如果
$email['username']
不是空的,如果是空的,
$name
应该设置为
$email
$email
while()
语句从
mysql\u fetch\u assoc()
设置。这是我目前的代码:

// print out all the email address recipients
$query = mysql_query("SELECT * FROM ownersemails WHERE deleted=0 LIMIT 5");
$recipients = '';
$total = mysql_num_rows($query);
$num = 0;
while($email = mysql_fetch_assoc($query)) {
    // add to count
    $num++;

    // set email
    $email = $email['email'];

    // set name as username if apparant
    if(!empty($email['username'])) {
        $name = $email;
    }
    else {
        $name = $email['username'];
    }

    // add to recipients string (=. append)
    $recipients .= '{ "email": "'.$email.'", "name": "'.$name.'" }';
    // only add a comma if it isn't the last one
    if($num!=$total) {
        $recipients .=',';
    }
}

您正在覆盖while循环设置的$email变量

 while($email = mysql_fetch_assoc($query)) {
然后在这里覆盖它:

$email = $email['email'];
因此,
$email
将成为字符串而不是数组。你可以把这个改成

$email_address = $email['email']

您有一个名为
$email
的数组,它保存数据库行中的所有列。您正在使用仅电子邮件列的值覆盖该对象:

while($email = mysql_fetch_assoc($query)) {
    // add to count
    $num++;

    // set email
    $email = $email['email'];
...
不要那样做。调用row对象
$row
会更有意义。你应该给变量命名,这样就可以清楚地知道它们是什么

while($row = mysql_fetch_assoc($query)) {
    // add to count
    $num++;

    // set email
    $email = $row['email'];
...
请它们不再得到维护,而是在使用。学习代替,并考虑使用。