Импортированный массив из mysql работает, но массив не может использоваться php как массив? - PullRequest
1 голос
/ 01 сентября 2011

Код ниже не будет работать из-за этой строки $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 голосов
/ 01 сентября 2011

mysql_query() возвращает только идентификатор ресурса результата. Чтобы получить данные, вы должны использовать одну из команд «fetch», например

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

Кроме того, ваш запрос может быть уязвим для внедрения SQL. Я бы не стал полностью доверять значению от session_id(). Я не совсем уверен в этом, но он может просто получить значение из cookie сессии.

Как минимум, санируйте значение с помощью mysql_real_escape_string(). Более надежное решение, которое вывело бы ваш код из темных веков, заключалось бы в использовании PDO и привязки параметров.

0 голосов
/ 01 сентября 2011

$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.

0 голосов
/ 01 сентября 2011

Хорошо, есть много фундаментальных проблем с вашим скриптом.Я лично рекомендую сначала прочитать эту статью , а затем о действительной функции , называемой mysql_fetch_array () .

Проще говоря, то, что вы получаете от mysql, является ресурсом (correntменя, если я ошибаюсь!) и вы должны получить массив на этом.

$params = mysql_fetch_array($data);

PS: Это не имеет смысла: $params=array($data);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...