来自mysql的导入数组可以工作,但是数组不能被php用作数组吗?

时间:2011-09-01 00:18:07

标签: php mysql arrays variables

由于此行$params=array($data);,以下代码无效。它需要除$ data之外的其他东西。或者它需要在此行之前使用$ data发生一些事情。

如果该行被写为$ params = array(“A”,“B”,“C”,“D”);然后它工作得很好,但我的数组是在$ data变量中,而不是像那样写出来的。如果有一种方法可以将数组转换为像这样写出来,那也可以。

最终结果应该显示数组内容的每种可能的组合(而不是排列)。就像上面的例子一样,它显示了ABC,BD等。

$data = mysql_query('SELECT weight FROM my_table WHERE session_id = "' . session_id() . '"'); 

$params=array($data);

$combinations=getCombinations($params);
function getCombinations($array)
{
    $length=sizeof($array);
    $combocount=pow(2,$length);
for ($i=1; $i<$combocount; $i++)
    {

$binary = str_pad(decbin($i), $length, "0", STR_PAD_LEFT);
        $combination='';
        for($j=0;$j<$length;$j++)
        {
            if($binary[$j]=="1")
                $combination.=$array[$j];
        }
        $combinationsarray[]=$combination;
        echo $combination."&lt;br&gt;";
    }
    return $combinationsarray;
} 

3 个答案:

答案 0 :(得分:0)

好的,你的脚本有很多基本问题。我个人建议先read this article,然后再推荐actual function called mysql_fetch_array()

简单地说,你从mysql收到的是资源(如果我错了,请告诉我!)你必须在那里获取数组。

$params = mysql_fetch_array($data);

PS:这没有意义:$params=array($data);

答案 1 :(得分:0)

mysql_query()仅返回结果资源ID。要检索数据,必须使用“fetch”命令之一,例如

$params = array();
while ($row = mysql_fetch_assoc($data)) {
    $params[] = $row['weight'];
}

此外,您的查询可能容易受到SQL注入攻击。我不会暗中信任session_id()的价值。我不完全确定这一点,但它可能只是从会话cookie中检索值。

至少,使用mysql_real_escape_string()清理价值。一个更强大的解决方案可以让你的代码脱离黑暗时代,就是使用PDO和参数绑定。

答案 2 :(得分:0)

$data不是数组。假设mysql_query()没有返回错误或空结果(顺便说一下,你应该检查两个mysql_error()mysql_num_rows()的查找文档,也许还有其他一些), $data是一种资源。

所以你希望$params=mysql_fetch_array($data)使它成为一个数组。 (假设只有一个结果。如果它可能返回多行,你可能想要将它包装成循环。如果你100%确定session_id是唯一的,那么你可以得到我猜想,如果你只关心多行结果中的第一个结果,你也可以在没有循环的情况下离开。虽然在这种情况下我会在查询中输入LIMIT 1提高绩效。)

有很多选项(你想要一个数字索引的数组,或者它们的键是列的名称等),所以请阅读http://www.php.net/manual/en/function.mysql-fetch-array.php