array_merge_recursive声明数组不是数组

时间:2015-04-17 23:32:53

标签: php mysql arrays

我已经查看了SO上的帖子,但找不到任何似乎可以解决我的问题。我是PHP / MySQL的新手,我似乎无法弄清楚为什么这个array_merge_recursive函数一直告诉我我的第一个数组不是数组。我测试了它,一切都告诉我它是...直到它击中这个功能。这是我的代码。我正在尝试从搜索表单处理多个可选变量(我已经查看了Sphinx / Lucene,但此时无法使用它们)。首先,我正在处理一些已发布到页面的变量。

if (isset($_POST['city'])) {
    $search = mysqli_real_escape_string($db, $_POST['city']);
    $sqlCity = "SELECT `user_id` FROM `clients` WHERE MATCH (`city`) AGAINST ('$search' IN NATURAL LANGUAGE MODE)";
    $dsCity = $db->query($sqlCity);
}

if (isset($_POST['state'])) {
    $search = mysqli_real_escape_string($db, $_POST['state']);
    $sqlState = "SELECT `user_id` FROM `clients` WHERE `state` = $search";
    $dsState = $db->query($sqlState);
}

if (isset($_POST['zip'])) {
    $search = mysqli_real_escape_string($db, $_POST['zip']);
    $sqlZip = "SELECT `user_id` FROM `clients` WHERE `zip` = $search";
    $dsZip = $db->query($sqlZip);
}

if (isset($_POST['business-name'])) {
    $search = mysqli_real_escape_string($db, $_POST['business-name']);
    $sqlBus = "SELECT `user_id` FROM `clients` WHERE `business_name` = '$search' ";
    $dsBus = $db->query($sqlBus);
}

然后,我想将结果数组合并到一个数组中,该数组作为单个变量传递给其余的PHP代码。

// Create array from Detailed Search variables
if (isset($_POST['city']) || isset($_POST['state']) || isset($_POST['zip']) || isset($_POST['business-name']) ) {
    $searchResults = array_merge_recursive($dsCity, $dsState, $dsZip, $dsBus);
}

?>

[在这里突破一些HTML ...然后进行处理。其余的代码工作。我甚至在它走到这一步之前就一直收到错误。]

while ($row=$searchResults->fetch_object()) {
    $userID = $row->user_id;

我不断收到的错误信息" array_merge_recursive():参数#1不是数组"。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您需要从查询中获取结果。 mysqli :: query返回一个mysqli_result对象,而不是一个数组。

$result = $db->query($sqlZip);
$dsZip = $result->fetch_array();

为每个查询执行此操作。这是您尝试使用的对象类型: http://php.net/manual/en/class.mysqli-result.php

我希望有所帮助!

答案 1 :(得分:-1)

您应初始化在array_merge_recursive中使用的所有数组,因为它们不能存在于您的代码中。