-1

我是 PHP 新手并整理了一些代码。这需要两个电话号码列表......然后将第二个列表中的号码拉出第一个列表,制作一个新的过滤列表。仅拉入一个列表时,完整的代码就可以正常工作。现在我已经修改它以过滤基于第二个列表的列表,代码现在失败了,我收到了这个警告:

警告:第 7 行 /var/www/html/send.php 中的非法字符串偏移量 'phone_number'

    // Get all of the phone numbers from the List
$sql = "SELECT phone_number FROM dial_list WHERE list_id='$list'";
$result = mysqli_query($link, $sql);
echo mysqli_error($link);
foreach ($result as $row) 
    {
      $all_people[] = $row['phone_number'];
    }

// Get phone numbers from our DNC list
$sql = "SELECT phone_number FROM dial_dnc";
$result = mysqli_query($link, $sql);
echo mysqli_error($link);

    foreach ($result as $row) 
    {
      $dnc_people[] = $row['phone_number'];
    }

// Remove DNC numbers from list
$filtered_people = array_diff($all_people, $dnc_people);
    foreach ($filtered_people as $row)
    {
      $people[] = $row['phone_number'];
    }

第 79 行(警告来自)是: $people[] = $row['phone_number'];

任何帮助查明错误或改进如何完成此过滤将不胜感激!

4

4 回答 4

2

您忘记了fetch结果集中的结果

foreach ($result as $row) {

应该

while ($row = mysqli_fetch_assoc($result)) {
于 2013-09-13T07:23:48.270 回答
2

这可以很容易地单独使用 mysql 完成。

SELECT 
dl.phone_number 
FROM dial_list AS dl 
INNER JOIN dial_dnc as dnc 
ON (dl.phone_number = dnc.phone_number)
WHERE list_id='$list'
于 2013-09-13T07:24:30.387 回答
1

$result是一个可遍历的对象,而不是一个数组。如文档中所见

失败时返回 FALSE。对于成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,mysqli_query() 将返回一个mysqli_result对象。对于其他成功的查询,mysqli_query() 将返回 TRUE。

您可以通过 2 种不同的方式遍历结果:

// precedural style
while ($row = mysqli_fetch_assoc($result)) { ... }
// OOP style
while($row = $result->fetch_assoc()) { ... }
于 2013-09-13T07:25:32.247 回答
0

由于您分配$all_peopleand $dnc_people,因此可能没有键,而是数字键$row['phone_number']。尝试$filtered_peoplephone_number

foreach($filtered_people as $key => $value)
{
    $people[] = $value;
}
于 2013-09-13T07:25:16.840 回答