2017-01-13 2 views
0

Я столкнулся с старой функцией, которую хотел бы преобразовать в mysqli, но я застрял в части mysql_result ($result, 0, $colname['i]); было бы лучше использовать data/field_seek, и если да, то какой был бы лучший метод?Преобразование mysql_ result() в mysqli в PHP-функции для цикла

function friend_data($q, $colname) 
    { 
      $result = mysql_query ($q); 
      if (mysql_num_rows($result) > 0) 
      { 
        $colname = explode("|", $colname); 
        for ($i = 0; $i < count($colname); $i++) 
        { 
          global $$colname[$i]; 
          $$colname[$i] = mysql_result ($result, 0, $colname[$i]); 
        } 
      } 
    } 

Как это используется прямо сейчас:

$q = "SELECT first_name,last_name,user_email FROM users WHERE country = '".$country."'; 

и вызова функции friend_data, поставляется с названиями колонок:

friend_data ($q, "first_name|last_name|user_email"); 

переменные ($first_name,$last_name,$user_email) теперь могут быть использованы в остальную часть кода, которую я хотел бы сохранить в таком формате, как показано ниже:

function friend_data($q, $colname) 
    { 
      $result = $db->query ($q); 

      if (mysqli_num_rows($result) > 0) 
      { 
        $colname = explode("|", $colname); 
        for ($i = 0; $i < count($colname); $i++) 
        { 
          global $$colname[$i]; 
          $$colname[$i] = ... ; 
        } 
      } 
    } 

Так что mysql_result ($result, 0, $colname[$i]) конкретно я не знаю, как «перевести» в рабочий код mysqli.

Любая помощь/советы/указатели о том, как действовать, будем очень благодарны!

+1

Это должно сделать трюк : http://php.net/manual/de/mysqli-stmt.bind-result.php – Jeff

+0

@barmar Почему это обозначено как дубликат? Я видел результат, опубликованный Barmar. Прежде чем я разместил свой вопрос. Ну что ж. –

+0

@WillyFox Решения в этом вопросе не работают? – Barmar

ответ

2

Это старый, старый, старый школьный код. В основном, они делают работу вручную, что PHP делает для вас автоматически.

Мы собираемся многое исправить здесь. Во-первых, mysqli НЕ использует глобальный коннектор, такой как mysql_query. Вам нужно передать это в качестве аргумента # 3. Don't use global if you can help it. Затем мы собираемся сделать массив return. Как он это делал, он был неуклюжим.

function friend_data($q, $cols, $connection) { 
    $data = []; // New array 
    $col = explode('|', $cols); 
    foreach($col as $col_row) $data[$col_row] = []; 
    $result = $connection->query($q); 

    if(!$result->num_rows) return $data; // No rows, so no data 

    while($row = $result->fetch_assoc()) { 
      foreach($row as $key => $data_col) $data[$key][] = $data_col; 
    } 
    return $data; 
} 

После того, как вы называете функции, вы можете сделать следующее, чтобы получить ВАР обратно

$data = friend_data ($q, "first_name|last_name|user_email", $connection); 
list($first_name, $last_name, $user_email) = $data; 

Это намного чище и проще работать с движением вперед

+0

большое спасибо! Да, это было старое, старое, старое школьное приложение, которое я собрал - играя в большой песочнице в течение нескольких лет, и, возвращаясь к коду, я понял, как много изменилось! Хотя это не работает так, как есть, это дало мне новый взгляд на то, как решить проблему, так что СПАСИБО! –

Смежные вопросы