我是PHP的新手并整理出一些代码。这是两个电话号码列表...然后拉出第一个列表的第二个列表OUT中的数字,制作一个新的过滤列表。只需拉入一个列表,完整的代码就可以正常运行。现在我已经修改它以根据第二个列表过滤列表,现在代码失败了,我收到了这个警告:
警告:第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'];
任何帮助查明错误或改进如何完成此过滤都将非常感激!
答案 0 :(得分:2)
您忘记了fetch
结果集的结果
foreach ($result as $row) {
应该是
while ($row = mysqli_fetch_assoc($result)) {
答案 1 :(得分: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'
答案 2 :(得分:1)
你的$result
是一个可遍历的对象,而不是一个数组。见in the docs
失败时返回FALSE。对于成功的SELECT,SHOW,DESCRIBE或EXPLAIN查询,mysqli_query()将返回mysqli_result对象。对于其他成功的查询,mysqli_query()将返回TRUE。
您可以通过两种不同的方式遍历结果:
// precedural style
while ($row = mysqli_fetch_assoc($result)) { ... }
// OOP style
while($row = $result->fetch_assoc()) { ... }
答案 3 :(得分:0)
由于您使用$all_people
分配$dnc_people
和$row['phone_number']
,$filtered_people
可能没有phone_number
密钥,而是数字密钥。尝试
foreach($filtered_people as $key => $value)
{
$people[] = $value;
}