2013-10-24 3 views
0

У меня есть эта функция, которую я создал для получения строк данных из базы данных mysqli.PHP MySQLi получить строку, используя foreach

Я стараюсь использовать foreach, но только я получил что-то вроде прикрепленного изображения, пожалуйста, просмотрите.

oops sorry, я не могу опубликовать изображение, мне понадобилось 10 репутации для этого.

ниже: Да это то, что я получил 1 2 x M M n O O X

мои коды ниже форме и PHP

## FOR SHORTHAND DATABASE 
if (!function_exists('hs_debugSQL')) { 
    function hs_debugSQL($hs_db, $string, $debug=0) { 
     if ($debug == 1) 
      print $string; 
     if ($debug == 2) 
      error_log($string); 
     $result = mysqli_query($hs_db, $string); 
     if ($result == false) { 
      error_log("SQL error: ".mysqli_error($hs_db)."\n\nOriginal query: $string\n"); 
      // Remove following line from production servers 
      die("SQL error: ".mysqli_error($hs_db)."\b<br>\n<br>Original query: $string \n<br>\n<br>"); 
     } 
     return $result; 
    } 
} 

## FOR SELECT SQL 
if (!function_exists('hs_getrows')) { 
    function hs_getrows($sql, $debug=0) { 
     $result = hs_debugSQL($sql, $debug); 
     if($lst = mysqli_fetch_array($result)) { 
      mysqli_free_result($result); 
      return $lst; 
     } 
     mysqli_free_result($result); 
     return false; 
    } 
} 

формы

<label for="message_title">Send to Admin <span class="red">*</span></label> 
<input id="name" name="user_to" class="text" /> 
<select name="user_to"> 
    <?php 
    global $hs_db; 
    $get_list_admin = hs_getrows($hs_db, "SELECT * FROM hs_users WHERE user_control = 'admin' "); 
    foreach ($get_list_admin as $keys) { 
     echo '<option value="'.$keys['user_login'].'">'.$keys['user_login'].'</option>';  
    } 
    ?> 
</select> 

соединение с MySQLi прекрасно, как вы можете видеть, что может получить данные из mysqli. , но когда я использовал foreach для извлечения данных, он отображает только 1 номер, а иногда 1 символ.

Мне нравится узнать, что не так с моими кодами для foreach.

спасибо.

+0

http://php.net/mysqli_fetch_array <- эта страница должна быть первым, чтобы проверить, если у вас есть какие-либо проблемы с этой функцией –

ответ

0

ОБЪЯСНЕНИЕ

Проблема здесь:

if($lst = mysqli_fetch_array($result)) { 
    mysqli_free_result($result); 
    return $lst; 
} 

mysqli_fetch_array возвращается строка за строкой, вы должны перебрать результат и возвращает массив. Что-то вроде этого

$lst = array(); 
while ($lst = mysqli_fetch_array($result)){ 
    $lst[] = $row; 
} 
mysqli_free_result($result); 

return $lst; 

Редакцией:

Ну, я вижу еще один extrange вещь

hs_debugSQL($sql, $debug); 

и в виде

hs_getrows($hs_db,....) 

Вы вызываете функцию hs_debugSQL с SQL вы хотите выполнить, я думаю, но в вашей функции первым параметром является ссылка на базу данных, и второй SQL, который вы хотите выполнить. Вы должны изменить это, чтобы соответствовать параметрам функции.

И вы вызываете функцию hs_getrows со ссылкой на базу данных в первом параметре и в объявлении функции вы ожидаете $ sql, поэтому вам следует изменить это.

+0

Как это было отметил в другом ответе, весь подход просто ужасен. Таким образом, если он опубликован снова, готовый к использованию - по-видимому, вред для OP –

0

Я не могу не думать, что эти «вспомогательные» функции усложняют работу, чем они должны быть. Там больше, чем одна проблема здесь, но здесь решающим:

Эта функция:

function hs_debugSQL($hs_db, $string, $debug=0) { 

требует $ hs_db, ресурс соединения dtabase, передается в, в то время как этот код:

function hs_getrows($sql, $debug=0) { 
    $result = hs_debugSQL($sql, $debug);  // where is $hs_db? 
    if($lst = mysqli_fetch_array($result)) { 
     mysqli_free_result($result); 
     return $lst; 
    } 
    mysqli_free_result($result); 
    return false; 

не может предоставить этот ключевой аргумент.Разумеется, в дальнейшем последовательность вызовов обнаруживается, что был отправлен, но теперь он был вызван $sql, и запрос, кажется, отсутствует.

Упростить! Избавьтесь от этих бесполезных функций, уточните, что вы пытаетесь сделать, и сделайте что-то работу. Затем, если вы почувствуете необходимость инкапсулировать часть этого снова, продолжайте и делайте это, зная, что код в основном работает.

0

Если вы хотите использовать real helper

<?php 
$sql = "SELECT user_login FROM hs_users WHERE user_control = 'admin'"; 
$admin_list = $hs_db->getCol($sql); 
?> 
<label for="message_title">Send to Admin <span class="red">*</span></label> 
<input id="name" name="user_to" class="text" /> 
<select name="user_to"> 
<?php foreach ($admin_list as $admin): ?> 
    <option value="<?=$admin?>"><?=$admin?></option> 
<?php endforeach ?> 
</select> 
Смежные вопросы